torch.nn:
Containers: 神经网络骨架
Convolution Layers 卷积层
Pooling Layers 池化层
Normalization Layers 正则化层
Non-linear Activations (weighted sum, nonlinearity) 非线性激活
Convolution Layers
Conv2d
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
in_channels= : 输入图像的通道数
out_channels= : 输出图象的通道数
kernel_size=3: 3x3的卷积核,会在训练过程中不断调整
stride: 卷积核滑动的步长
padding: 在图像的纵向和横向填充 ,填充的地方一般默认为0,这样卷积核可以划过更多地方
padding_mode=zeros: padding时的填充值
dilation: 卷积核的对应位
groups
bias:偏置
卷积过程:
经典vgg16的卷积过程:
推导padding等参数的公式:
Pooling Layers
MaxPool2d
最大池化--->下采样
(池化层没有要优化的参数,只是形式上的卷积核)
kernel_size=3: 3x3的窗口,用来取最大值
stride: 窗口滑动的步长,默认值是kernel_size的大小
padding: 在图像的纵向和横向填充 ,填充的地方一般默认为0
dilation: 空洞卷积
return_indices: 通常来说不会用到
ceil_mode: 设置为True时,会使用ceil模式(不满3x3也取一个最大值)而不是floor模式(不满3x3就不取值 )
一般理解------ceil:向上取整,floor模式:向下取整
为什么要进行最大池化? 在保持数据特征的同时,减小数据量
Non-linear Activations
Relu:大于0取原值,小于0取0
Sigmoid:常用激活函数