深度学习34:卷积神经网络:池化层(基本概念和代码) 目录标题一、池化层二、代码(池化在卷积的基础上再池化像素一直缩小)三、效果图一、池化层1.池化层缩小长、宽方向上的空间来进行降维能够缩减模型的大小并提高计算速度。例如对数据进行步幅为 2 的 2×2 的 Max 池化除了 Max 池化计算窗口内的最大值还有 Average 池化平均池化计算窗口内的平均值等。一般会将池化的大小窗口和步幅设置为相同的值比如 2×2 的窗口大小步幅会设置为 2。池化同样也可以设置填充。2.和卷积层不同池化层没有要学习的参数并且池化运算按通道独立进行经过池化运算后数据的通道数不会发生变化。3.池化的另一个特点是对微小偏差具有鲁棒性数据发生微小偏差时池化可能会返回相同的结果。例如数据在宽度方向上偏离 1 个元素返回的结果不变。二、代码(池化在卷积的基础上再池化像素一直缩小)importtorchimportmatplotlib.pyplotasplt#1.读取图片imgplt.imread(../../data/duck.jpg)print(img.shape)# (1080, 1080, 3)# 2.将图片数据调整为卷积层输入特征图对应的形状inputtorch.tensor(img).permute(2,0,1).float()print(f输入特征图的形状:{input.shape})# 输入特征图的形状:torch.Size([3, 1080, 1080])# 3.定义卷积层convtorch.nn.Conv2d(in_channels3,out_channels3,kernel_size9,stride3,padding0,biasFalse)# 4. 前向传播,将卷积层应用到输入特征图上outputconv(input)print(f输出特征图的形状:{output.shape})# 输出特征图的形状:torch.Size([3, 358, 358])# 5. 定义池化层pooltorch.nn.MaxPool2d(kernel_size6,stride6,padding1)# 6. 前向传播进行池化操作output2pool(output)print(output2.shape)# torch.Size([3, 60, 60])# 画图outputtorch.clamp(output.int(),0,255)outputoutput.permute(1,2,0).detach().numpy()output2torch.clamp(output2.int(),0,255)output2output2.permute(1,2,0).detach().numpy()fig,axplt.subplots(1,3,figsize(15,5))ax[0].imshow(img)ax[1].imshow(output)ax[2].imshow(output2)# plt.show()plt.savefig(pooling_test_result.png)三、效果图