卷积神经网络中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参数
| import torch.nn as nn | 
输出
| SimpleCNN( | 
提取模型的层级结构
提取层级结构可以使用以下几个nn.Model的属性,第一个是children()属性,它会返回下一级模块的迭代器,在上面这个模型中,它会返回在self.layer1,self.layer2,self.layer4上的迭代器而不会返回它们内部的东西;modules()
会返回模型中所有的模块的迭代器,这样它就能访问到最内层,比如self.layer1.conv1这个模块;还有一个与它们相对应的是name_children()属性以及named_modules(),这两个不仅会返回模块的迭代器,还会返回网络层的名字。
提取出model中的前两层
| nn.Sequential(*list(model.children())[:2]) | 
输出:
| Sequential( | 
提取出model中的所有卷积层
| conv_model = nn.Sequential() | 
输出:
| Sequential( | 
提取网络参数并对其初始化
nn.Moudel里面有两个特别重要的关于参数的属性,分别是named_parameters()和parameters()。前者会输出网络层的名字和参数的迭代器,后者会给出一个网络的全部参数的迭代器。
| for param in model.named_parameters(): | 
输出:
| layer1.conv1.weight | 
案例:使用卷积神经网络实现对Minist数据集的预测
| import matplotlib.pyplot as plt | 
输出:
| 第0次训练:训练准确率:0.9646166666666718,测试准确率:0.9868999999999996 | 
