尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

【刘二老师】pytorch深度学习笔记【07处理多维特征的输入】 【刘二老师】pytorch深度学习笔记【07处理多维特征的输入】一、糖尿病数据集引入把XY字段读出来构成矩阵。图中X有八个维度八个样本每个样本八个特征。Y代表未来病情是否会加重。二、多维的逻辑斯蒂模型每个样本八个特征每个特征都要与其对应的权重相乘。等价于n维的 X 向量与n维的权重 w 进行相乘。这里的σ就是上节的逻辑斯蒂函数。pytorch提供的sigmoid函数是一个按向量来计算的形式。可以合并成矩阵运算可以看到输入为八维输出为一维所以在代码中要把输入维度和输出维度分别改为81。这也是一个降维的体现。三、多个逻辑斯特函数构成多层神经网络把如上的多个逻辑斯蒂函数首尾相连可构成一个多层神经网络。矩阵是一个空间变换的函数。把矩阵从N维空间的向量输入映射为M维空间输出。这是一个线性映射。最终我们要的是非线性用多个如上的线性变换层找到最优的权重用非线性σ组合起来模拟非线性空间变换函数。如下图维度分步进行降低。四、具体代码及分析如下importnumpyasnpimporttorchimportmatplotlib.pyplotasplt xynp.loadtxt(diabetes.csv,delimiter,,dtypenp.float32)x_datatorch.from_numpy(xy[:,:-1])# 第一个‘’是指读取所有行第二个‘’是指从第一列开始最后一列不要y_datatorch.from_numpy(xy[:,[-1]])# [-1] 最后得到的是个矩阵#torch.from_numpy创建TensorclassModel(torch.nn.Module):def__init__(self):super(Model,self).__init__()self.linear1torch.nn.Linear(8,6)# 输入数据x的特征是8维x有8个特征self.linear2torch.nn.Linear(6,4)self.linear3torch.nn.Linear(4,1)self.sigmoidtorch.nn.Sigmoid()# 将其看作是网络的一层是个模块而不是简单的函数使用defforward(self,x):xself.sigmoid(self.linear1(x))#只用一个x从头用到尾xself.sigmoid(self.linear2(x))xself.sigmoid(self.linear3(x))# y hatreturnx modelModel()# construct loss and optimizer# criterion torch.nn.BCELoss(size_average True)criteriontorch.nn.BCELoss(reductionmean)optimizertorch.optim.SGD(model.parameters(),lr0.1)epoch_list[]loss_list[]# training cycle forward, backward, updateforepochinrange(100):y_predmodel(x_data)#并没有用mini Batchlosscriterion(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()
返回列表