卷积层
1.可参考此文章: https://blog.csdn.net/tjlakewalker/article/details/83275322
2.实现代码:
python
import torch.nn as nn
conv = nn.Conv2d(in_channels=3, #输入通道
out_channels=64, #输出通道
kernel_size=3, #卷积核
stride=1) #步长
print(conv)
# 结果:Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1))
3.输出矩阵的大小计算公式
python
W:输入矩阵边长 F:过滤器边长 P:填充数 S:步长
输出的正方形矩阵边长:(W-F+2P)/S+1
反卷积
简单地说就是卷积的反向操作
pytorch中有两种反卷积方法
1.双线性插值上采样:
python
import torch.nn as nn
bilinear_layer = nn.UpsamplingBilinear2d(size = None, #期望的输出尺寸
scale_factor = None) #缩放因子:决定缩放的大小
2.转置卷积
python
import torch.nn as nn
transpose_conv = nn.ConvTranspose2d(in_channels = None, #输入通道
out_channels = None, #输出通道
kernel_size = None, #卷积核
stride = None, #步长
padding = None) #填充数
转置卷积是通过学习的方式,即在训练中更新卷积核的参数,完成上采样,其计算结果更具鲁棒性,缺点是会增加模型的训练时间和训练参数;其代码比卷积层代码仅多了一个填充参数,其余参数不变
池化层
1.最大池化
python
import torch.nn as nn
maxpool_layer = nn.MaxPool2d(kernel_size = None, #卷积核
stride = None, #步长
padding = None, #填充数
dilation = None, #膨胀数
return_indices = None, #是否返回元素的位置信息
ceil_mode=None) #是否向上取整
2.平均池化
python
import torch.nn as nn
average_layer = nn.AvgPool2d(kernel_size = None, #卷积核
stride = None, #步长
padding = None, #填充数
ceil_mode=None) #是否向上取整
3.Mixed pooling
4.Stochastic Pooling
特点:
1.池化层是对输入的特征图进行压缩
2.池化层可以使特征图变小简化计算
3.池化不断抽取局部区域的特征,但不关心区域的位置,目标位置在较小的移动之后扔保持相同的结果,在一定程度上可以增加了平移不变性
正则化层
全称Batch Normalization(BN),就是归一化处理
好处:减轻对初始数据的依赖;加速训练,学习率可以设置更高
坏处:一来batch的大小,batch不同,方差和均值的计算不稳定。------>BN层不适合batch较小的场景,也不适合RNN(RNN是动态网络结构,batch有长有短),只适合batch较大的场景
python
import torch.nn as nn
conv = nn.Conv2d(in_channels=3, #输入通道
out_channels=64, #输出通道
kernel_size=3, #卷积核
stride=1) #步长
BN = nn.BatchNorm2d(64) #BN层参数紧跟卷积层的输出参数
全连接层
python
import torch.nn as nn
linear = nn.Linear(in_features=None, #输入通道数
out_features=None) #输出通道数:一般是输出类别数
当特征图纬度过大时,可以通过几个全连接层完成降纬,最后一个全连接层的输出通道为最终的分类类别:
python
import torch.nn as nn
linear_1 = nn.Linear(2048,512) #通过两个全连接层由2048降至5
linear_2 = nn.Linear(512,5)