最大池化的使用

144 阅读2分钟

一、池化层

image.png

最大池化操作参数解析

最大池化是一种下采样技术,通常用于卷积神经网络中,以减少数据的维度并保持特征的显著性。

  1. kernel_size:

    • 窗口的大小,决定了在池化操作中选取最大值的区域大小。例如,kernel_size=2 表示在2x2的区域内进行池化。
  2. stride:

    • 窗口在输入数据上移动的步长。默认情况下,步长与kernel_size相同。步长决定了池化区域在特征图上的移动距离,从而影响输出尺寸。
  3. padding:

    • 在输入的边界处添加零填充,以控制输出特征图的尺寸并避免边界效应。零填充有助于保持输入数据的空间结构。
  4. dilation:

    • 控制窗口内元素的间距,通过增加间距来扩大有效的池化区域。常用于更复杂的池化需求。(也叫空洞卷积)
  5. return_indices:

    • 如果设为True,池化操作将返回最大值的索引位置,连同池化结果一起输出。这在后续使用MaxUnpool2d进行反池化时非常有用,因为最大值索引可以帮助重构输入的空间结构。
  6. ceil_mode:

    • 默认使用floor来计算输出形状,如果设为True,则使用ceil来计算输出尺寸(进行保留)。这可以影响输出形状,通常有助于确保维度的整除特性。

这些参数共同决定了最大池化操作的性能和行为,能够调整池化层以优化特征提取和尺寸压缩。最大池化不仅减少计算量,还能提高模型的泛化能力。

二、实操

image.png

import torch
from torch import nn
from torch.nn import MaxPool2d

input = torch.tensor([[1, 2, 0, 3, 1],
[0,1,2,3,1],
[1,2,1,0,0],
[5,2,3,1,1],
[2,1,0,1,1]],dtype=torch.float32)

input = torch.reshape(input,(-1, 1,5, 5))
print(input.shape)
class Xzx(nn.Module):
    def __init__(self):
        super(Xzx,self).__init__()
        self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=True)
    def forward(self,input):
        output = self.maxpool1(input)
        return output
    
xzx = Xzx()
output = xzx(input)
print(output)

image.png