卷积神经网络中nn.Conv2d()和nn.MaxPool2d()
卷积神经网络之Pythorch实现:
nn.Conv2d()
就是PyTorch中的卷积模块
参数列表
参数 | 作用 |
---|---|
in_channels | 输入数据体的深度 |
out_channels | 输出数 据体的深度 |
kernel_size | 滤波器(卷积核)的大小 注1 |
stride | 滑动的步长 |
padding | 零填充的圈数 注2 |
bias | 是否启用偏置,默认是True,代表启用 |
groups | 输出数据体深度上和输入数 据体深度上的联系 注3 |
dilation | 卷积对于输入数据体的空间间隔 注4 |
注:1. 可以使用一 个数字来表示高和宽相同的卷积核,比如 kernel_size=3,也可以使用 不同的数字来表示高和宽不同的卷积核,比如 kernel_size=(3, 2);
-
padding=0表示四周不进行零填充,而 padding=1表示四周进行1个像素点的零填充;
-
groups表示输出数据体深度上和输入数 据体深度上的联系,默认 groups=1,也就是所有的输出和输入都是相 关联的,如果 groups=2,这表示输入的深度被分割成两份,输出的深 度也被分割成两份,它们之间分别对应起来,所以要求输出和输入都 必须要能被 groups整除。
-
默认dilation=1详情见 nn.Conv2d()中dilation参数的作用或者CSDN
nn.MaxPool2d()
表示网络中的最大值池化
参数列表:
参数 | 作用 |
---|---|
kernel_size | 与上面nn.Conv2d() 相同 |
stride | 与上面nn.Conv2d() 相同 |
padding | 与上面nn.Conv2d() 相同 |
dilation | 与上面nn.Conv2d() 相同 |
return_indices | 表示是否返回最大值所处的下标,默认 return_indices=False |
ceil_mode | 表示使用一些方格代替层结构,默认 ceil_mode=False |
注:一般不会去设置return_indices
和ceil_mode
参数
1 | import torch.nn as nn |
输出
1 | SimpleCNN( |
提取模型的层级结构
提取层级结构可以使用以下几个nn.Model
的属性,第一个是children()
属性,它会返回下一级模块的迭代器,在上面这个模型中,它会返回在self.layer1,self.layer2,self.layer4上的迭代器而不会返回它们内部的东西;modules()
会返回模型中所有的模块的迭代器,这样它就能访问到最内层,比如self.layer1.conv1这个模块;还有一个与它们相对应的是name_children()
属性以及named_modules()
,这两个不仅会返回模块的迭代器,还会返回网络层的名字。
提取出model中的前两层
1 | nn.Sequential(*list(model.children())[:2]) |
输出:
1 | Sequential( |
提取出model中的所有卷积层
1 | conv_model = nn.Sequential() |
输出:
1 | Sequential( |
提取网络参数并对其初始化
nn.Moudel
里面有两个特别重要的关于参数的属性,分别是named_parameters()
和parameters()
。前者会输出网络层的名字和参数的迭代器,后者会给出一个网络的全部参数的迭代器。
1 | for param in model.named_parameters(): |
输出:
1 | layer1.conv1.weight |
案例:使用卷积神经网络实现对Minist数据集的预测
1 | import matplotlib.pyplot as plt |
输出:
1 | 第0次训练:训练准确率:0.9646166666666718,测试准确率:0.9868999999999996 |