1. 池化层
在卷积网络中, 通常会在卷积层之间增加池化(Pooling) 层, 以降低特征图的参数量, 提升计算速度, 增加感受野, 是一种降采样操作。池化是一种较强的先验, 可以使模型更关注全局特征而非局部出现的位置, 这种降维的过程可以保留一些重要的特征信息, 提升容错能力, 并且还能在一定程度上起到防止过拟合的作用。
在物体检测中, 常用的池化有最大值池化(Max Pooling) 与平均值池化(Average Pooling) 。 池化层有两个主要的输入参数, 即核尺寸kernel_size与步长stride。 如图3.7所示为一个核尺寸与步长都为2的最大值池化过程, 以左上角为例, 9、 20、 15与26进行最大值池化, 保留26。
下面是PyTorch对于池化层的实现。
1 importtorch2 from torch importnn3
4 max_pooling = nn.MaxPool2d(2, stride=2)5 aver_pooling = nn.AvgPool2d(2, stride=2)6
7 input = torch.randn(1, 1, 4, 4)8 print(input)9 >> tensor([[[[ 1.2237, -0.8173, -0.2594, 0.1698],10 [-0.1023, 0.6973, -0.6429, 0.8561],11 [-0.3660, 0.1269, 0.2488, 0.0576],12 [ 0.0859, 0.1622, -0.0725, -0.0237]]]])13
14 #池化主要需要两个参数, 第一个参数代表池化区域大小, 第二个参数表示步长
15 out_max =max_pooling(input)16 print(out_max)17 >> tensor([[[[1.2237, 0.8561],18 [0.1622, 0.2488]]]])19
20 #调用最大值池化与平均值池化, 可以看到size从[1, 1, 4, 4]变为了[1, 1, 2, 2]
21 out_aver =aver_pooling(input)22 print(out_aver)23 >> tensor([[[[0.2503, 0.0309],24 [0.0023, 0.0525]]]])
View Code
2. Dropout层 在深度学习中, 当参数过多而训练样本又比较少时, 模型容易产生过拟合现象。 过拟合是很多深度学