上一篇博客对Pytorch包中的变量和梯度有了初步了解,接下来进入正题——用Pytorch中的torch.nn包实现神经网络。
1.Pytorch实现神经网络的典型训练过程
在这里以Lenet模型为例,由两个卷积层,两个池化层,以及两个全连接层组成。 卷积核大小为5*5,stride为1,采用MAX池化。以该网络分类数字图像为例:
Pytorch实现神经网络的典型训练过程如下:
- 定义具有一些可学习参数(权重)的神经网络
- 迭代输入数据
- 通过网络处理输入
- 计算损失
- 将梯度传播回到网络参数中
- 使用梯度下降更新网络权重,
weight = weight - learning_rate * gradient
2.定义网络
Lenet模型的Pytorch代码如下:
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 1 input image channel, 6 output channels, 5x5 square convolution kernel
self.conv1 = nn.Conv2d(1, 6, 5)
self.conv2 = nn.Conv2d(6, 16, 5)
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def