具体补充:https://iphysresearch.github.io/posts/receptive_field.html
超参数:在开始学习过程之前设置值的参数
计算
W 表示输入的数据宽/高 , D表示输入数据的深度
F 表示卷积层中神经元的感受野尺寸(滤波器尺寸),S表示步长, P 表示边界填充的数量
超参数:空间大小 F 和滑动步长 S
计算:
W 表示输入的数据宽/高 , D表示输入数据的深度
池化层中很少引入零填充
一般来说应该谨慎使用大尺寸的池化窗口,以免对网络有破坏性
一般在卷积层之间引入最大池化,在卷积神经网络的最后一层引入平均池化
顺序:卷积层—(批标准化层—)ReLU层—池化层
1、小滤波器的有效性
2、网络的尺寸
( 1 ) 输入层:一般而言,输入层的大小应该能够被 2 整除很多次(由于池化层步长一般为2),常用的数字包括 32 , 64 , 96, 224
( 2 ) 卷积层:卷积层应该尽可能使用小尺寸的滤波器,比如 3 x 3 或者 5 x 5。滑动步长取 1。需要对输入数据体进行零填充,以保证卷积层输入和输出的空间尺寸保持一致,并且图像的边缘信息不会过快地损失掉
如果必须要使用更大的滤波器尺寸,比如 7 x 7 ,常用在第一个面对原始图像的卷积层
( 3 ) 池化层:池化层对输入的数据空间维度进行下采样,常使用 2x2 的感受野(最大池化),滑动步长取 2
另一个不常用的是使用 3x3 的感受野,步长设置为2
池化层的感受野大小很少超过 3(避免池化过程过于激烈,造成信息的丢失,造成算法的性能变差)
在卷积神经网络中所有的层结构都可以通过nn这个包调用
卷积模块:
nn.Conv2d ( ),in_channels, out_channels, kernel size, stride, padding,除此之外还有参数 dilation, groups ,bias
bias 是一个布尔值,默认 bias=True ,表示使用偏置; groups 表示输出数据体深度上和输入数据体深度上的联系,默认 groups=1,也就是所有的输出和输入都是相关联的,如果 groups=2 ,这表示输入的深度被分割成两份,输出的深度也被分割成两份
池化模块:
nn.MaxPool2d (),kernel_size、stride、padding 、dilation 、return_indices(是否返回最大值所处的下标,默认 False ) 、ceil_mode
nn.AvgPool2d() ,多个参数 count_include_pad,表示计算均值时是否包含零填充,默认True
可以在建立卷积层和池化层时计算数据体大小,在代码旁边注释,不容易出错
nn.Module 的几个属性
children () ,返回下一级模块的迭代器,返回 self.layer1,self.layer2, self.layer3 ,以及 self.layer4.不返回它们内部的东西modules () ,返回模型中所有模块的迭代器,能够访问到最内层,比如self.layer1. conv1这个模块
named children ()以及 named modules () ,这两个不仅返回模块的迭代器,还返问网络层的名字
nn.Module 里有两个关于参数的属性
分别是 named_parameters ():给出网络层的名字和参数 parameters ():给出一个网络的全部参数
权重初始化:
权重是一个 Variable ,只需要取出其 data 属性,对它进行处理就可以了