1.pytorch的nn模块提供了两种快速搭建神经网络的方式。第一种是nn.Sequential,将网络以序列的方式进行组装,不过这种方法不常用。每个层使用前面层计算的输出作为输入,并且在内部都会维护层与层之间的权重矩阵和偏置向量。使用nn.Sequential方式定义模型,如下所示的代码定义了一个三层的神经网络。
import torch model=torch.nn.Sequential( torch.nn.Linear(10,20), torch.nn.ReLU(), torch.nn.Linear(20,2), )
输入层的维度为10,中间隐藏层的维度为20,输出层的维度为2。中间使用ReLU作为激活函数
另一种常见的神经网络方式是继承nn.Module,需要实现_init_和forward前向传播两个方法。同样实现上面的三层神经网络。
import torch class SimpleLayerNet(torch.nn.Module): def __init__(self,D_in,H,D_out): super(SimpleLayerNet,self).__init__() self.linear1=torch.nn.Linear(D_in,H) self.relu=torch.nn.ReLU() self.linear2=torch.nn.Linear(H,D_out) def forward(self,x): h_relu=self.relu(self.linear1(x),clamp(min=0)) y_pred=self.linear2(h_relu) return y_pred
model=SimpleLayerNet(10,20,2) model
2.神经网络实际上是线性方程的组合,借助神经网络的隐藏层可以将过多的特征压缩,压缩后的特征维度更低,便于线性方程的求解。
3.定义损失函数
#定义损失函数 criterion=torch.nn.MSELoss()
4.所有的优化器的输入基本上都是一样的,即需要优化参数和学习率。这里直接通过mode.parameters方法便可获取网络层中所有需要优化的权重矩阵及偏置项。
#定义优化器 optimizer=torch.optim.Adam(model.parameters(),0.001)
5.学习率的指定很关键,学习率过大,优化过程容易出现波动,学习率过小,又容易使模型收敛变慢。
6.模型需要多次迭代,而每次完整的迭代被视为一个epoch。在迭代过程中,每次取一批数据进行训练,记录每次训的损失,用于可视化展示。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)