PyTorch快速入门教程四(cnn:卷积神经网络 )
2017-07-02 00:00
761 查看
摘要: 以前的教程中我们已经完成了基础部分,接下来进入深度学习部分,第一个要讲的是cnn,也就是卷积神经网络:
以前的教程中我们已经完成了基础部分,接下来进入深度学习部分,第一个要讲的是cnn,也就是卷积神经网络:
数据集仍然是使用MNIST手写字体,和之前一样做同样的预处理。
以上就是网络的模型的部分了。和之前比主要增加了这些不一样的部分
1、nn.Sequential()
这个表示将一个有序的模块写在一起,也就相当于将神经网络的层按顺序放在一起,这样可以方便结构显示
2、nn.Conv2d()
这个是卷积层,里面常用的参数有四个,
3、nn.ReLU()
这个表示使用ReLU激活函数,里面有一个参数inplace,默认设置为False,表示新创建一个对象对其修改,也可以设置为True,表示直接对这个对象进行修改
4、nn.MaxPool2d() 这个是最大池化层,当然也有平均池化层,里面的参数有
模型需要传入的参数是输入的图片维数以及输出的种类数
这是训练20个epoch的结果,当然你也可以增加训练次数,修改里面的参数达到更好的效果,可以参考一下Lenet的网络结构,自己重新写一写
大体上简单的卷积网络就是这么构建的,当然现在也有很多复杂的网络,比如vgg,inceptionv1-v4,resnet以及修正的inception-resnet,这些网络都是深层的卷积网络,有兴趣的同学可以去看看pytorch的官方代码实现,或者去github上搜索相应的网络。
在这里,我整理发布了Pytorch中文文档,方便大家查询使用,同时也准备了中文论坛,欢迎大家学习交流!
Pytorch中文文档
Pytorch中文论坛
Pytorch中文文档已经发布,完美翻译,更加方便大家浏览:
Pytorch中文网:https://ptorch.com/
Pytorch中文文档:https://ptorch.com/docs/1/
以前的教程中我们已经完成了基础部分,接下来进入深度学习部分,第一个要讲的是cnn,也就是卷积神经网络:
数据集仍然是使用MNIST手写字体,和之前一样做同样的预处理。
model
# 定义 Convolution Network 模型 class Cnn(nn.Module): def __init__(self, in_dim, n_class): super(Cnn, self).__init__() self.conv = nn.Sequential( nn.Conv2d(in_dim, 6, 3, stride=1, padding=1), nn.ReLU(True), nn.MaxPool2d(2, 2), nn.Conv2d(6, 16, 5, stride=1, padding=0), nn.ReLU(True), nn.MaxPool2d(2, 2), ) self.fc = nn.Sequential( nn.Linear(400, 120), nn.Linear(120, 84), nn.Linear(84, n_class) ) def forward(self, x): out = self.conv(x) out = out.view(out.size(0), -1) out = self.fc(out) return out model = Cnn(1, 10) # 图片大小是28x28 use_gpu = torch.cuda.is_available() # 判断是否有GPU加速 if use_gpu: model = model.cuda() # 定义loss和optimizer criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=learning_rate)
以上就是网络的模型的部分了。和之前比主要增加了这些不一样的部分
1、nn.Sequential()
这个表示将一个有序的模块写在一起,也就相当于将神经网络的层按顺序放在一起,这样可以方便结构显示
2、nn.Conv2d()
这个是卷积层,里面常用的参数有四个,
in_channels,
out_channels,
kernel_size,
stride,
padding
in_channels表示的是输入卷积层的图片厚度
out_channels表示的是要输出的厚度
kernel_size表示的是卷积核的大小,可以用一个数字表示长宽相等的卷积核,比如kernel_size=3,也可以用不同的数字表示长宽不同的卷积核,比如kernel_size=(3, 2)
stride表示卷积核滑动的步长
padding表示的是在图片周围填充0的多少,padding=0表示不填充,padding=1四周都填充1维
3、nn.ReLU()
这个表示使用ReLU激活函数,里面有一个参数inplace,默认设置为False,表示新创建一个对象对其修改,也可以设置为True,表示直接对这个对象进行修改
4、nn.MaxPool2d() 这个是最大池化层,当然也有平均池化层,里面的参数有
kernel_size,
stride,
padding
kernel_size表示池化的窗口大小,和卷积层里面的
kernel_size是一样的
stride也和卷积层里面一样,需要自己设置滑动步长
padding也和卷积层里面的参数是一样的,默认是0
模型需要传入的参数是输入的图片维数以及输出的种类数
train
训练的过程是一样的,只是输入图片不再需要展开这是训练20个epoch的结果,当然你也可以增加训练次数,修改里面的参数达到更好的效果,可以参考一下Lenet的网络结构,自己重新写一写
大体上简单的卷积网络就是这么构建的,当然现在也有很多复杂的网络,比如vgg,inceptionv1-v4,resnet以及修正的inception-resnet,这些网络都是深层的卷积网络,有兴趣的同学可以去看看pytorch的官方代码实现,或者去github上搜索相应的网络。
在这里,我整理发布了Pytorch中文文档,方便大家查询使用,同时也准备了中文论坛,欢迎大家学习交流!
Pytorch中文文档
Pytorch中文论坛
Pytorch中文文档已经发布,完美翻译,更加方便大家浏览:
Pytorch中文网:https://ptorch.com/
Pytorch中文文档:https://ptorch.com/docs/1/
相关文章推荐
- PyTorch快速入门教程四(cnn:卷积神经网络 )
- PyTorch快速入门教程八(使用word embedding做自然语言处理的词语预测)
- PyTorch快速入门教程三(神经网络)
- PyTorch快速入门教程七(pytorch下RNN如何做自然语言处理)
- PyTorch快速入门教程五(rnn)
- PyTorch快速入门教程一(环境配置)
- PyTorch快速入门教程九(使用LSTM来做判别每个词的词性)
- PyTorch快速入门教程九(使用LSTM来做判别每个词的词性)
- PyTorch快速入门教程五(rnn)
- PyTorch快速入门教程二(线性回归以及logistic回归)
- PyTorch快速入门教程六(使用LSTM做图片分类)
- PyTorch 深度学习:60分钟快速入门
- pytorch入门教程(一):Tensor###tensor好好好####
- Pytorch入门——安装快速安装方法
- PyTorch 深度学习:60分钟快速入门
- Pytorch快速入门一-Tensor
- PyTorch 深度学习:60分钟快速入门
- Pytorch实现卷积神经网络CNN
- pytorch快速安装与入门
- TensorFlow人工智能引擎入门教程之二 CNN卷积神经网络的基本定义理解。