【刘二老师】pytorch深度学习笔记【07处理多维特征的输入】
2026/8/5 4:48:24 网站建设 项目流程

【刘二老师】pytorch深度学习笔记【07处理多维特征的输入】

一、糖尿病数据集引入

  • 把X,Y字段读出来构成矩阵。
  • 图中X有八个维度,八个样本,每个样本八个特征。
  • Y代表未来病情是否会加重。

二、多维的逻辑斯蒂模型

  • 每个样本八个特征,每个特征都要与其对应的权重相乘。
  • 等价于n维的 X 向量与n维的权重 w 进行相乘。
  • 这里的σ就是上节的逻辑斯蒂函数。
  • pytorch提供的sigmoid函数是一个按向量来计算的形式。
  • 可以合并成矩阵运算,可以看到:输入为八维,输出为一维,所以在代码中要把输入维度和输出维度分别改为8,1。
  • 这也是一个降维的体现。

三、多个逻辑斯特函数构成多层神经网络

  1. 把如上的多个逻辑斯蒂函数首尾相连,可构成一个多层神经网络。
  2. 矩阵是一个空间变换的函数。
  • 把矩阵从N维空间的向量(输入)映射为M维空间(输出)。
  • 这是一个线性映射。
  1. 最终我们要的是非线性,用多个如上的线性变换层,找到最优的权重,用非线性σ组合起来,模拟非线性空间变换函数。
  2. 如下图,维度分步进行降低。

四、具体代码及分析如下

importnumpyasnpimporttorchimportmatplotlib.pyplotasplt xy=np.loadtxt('diabetes.csv',delimiter=',',dtype=np.float32)x_data=torch.from_numpy(xy[:,:-1])# 第一个‘:’是指读取所有行,第二个‘:’是指从第一列开始,最后一列不要y_data=torch.from_numpy(xy[:,[-1]])# [-1] 最后得到的是个矩阵#torch.from_numpy创建TensorclassModel(torch.nn.Module):def__init__(self):super(Model,self).__init__()self.linear1=torch.nn.Linear(8,6)# 输入数据x的特征是8维,x有8个特征self.linear2=torch.nn.Linear(6,4)self.linear3=torch.nn.Linear(4,1)self.sigmoid=torch.nn.Sigmoid()# 将其看作是网络的一层,是个模块,而不是简单的函数使用defforward(self,x):x=self.sigmoid(self.linear1(x))#只用一个x,从头用到尾x=self.sigmoid(self.linear2(x))x=self.sigmoid(self.linear3(x))# y hatreturnx model=Model()# construct loss and optimizer# criterion = torch.nn.BCELoss(size_average = True)criterion=torch.nn.BCELoss(reduction='mean')optimizer=torch.optim.SGD(model.parameters(),lr=0.1)epoch_list=[]loss_list=[]# training cycle forward, backward, updateforepochinrange(100):y_pred=model(x_data)#并没有用mini Batchloss=criterion(y_pred,y_data)print(epoch,loss.item())optimizer.zero_grad()loss.backward()optimizer.step()plt.plot(epoch_list,loss_list)plt.ylabel('loss')plt.xlabel('epoch')plt.show()

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询