目录
在 PyTorch 中,nn.MaxPool1d
是一种一维最大池化层,常用于卷积神经网络中对输入张量的空间维度(宽度)进行下采样。该层通过在输入张量上应用一个滑动窗口(也称为池化窗口),并在每个窗口中选择最大值。让我们详细解释一下其参数:
kernel_size
(Union[int, Tuple[int]]):滑动窗口的大小,必须大于 0。stride
(Union[int, Tuple[int]]):滑动窗口的步长,必须大于 0。默认值是 kernel_size
。padding
(Union[int, Tuple[int]]):在两侧添加的隐式负无穷填充,必须大于等于 0 且小于等于 kernel_size / 2
。dilation
(Union[int, Tuple[int]]):滑动窗口内部元素之间的步距,必须大于 0。return_indices
(bool):如果为 True,则返回最大值以及其索引。在之后使用 torch.nn.MaxUnpool1d
时很有用。ceil_mode
(bool):如果为 True,则使用 ceil 而不是 floor 来计算输出形状。这确保输入张量中的每个元素都被滑动窗口覆盖。示例:
# 池化大小=3,步长=2
m = nn.MaxPool1d(3, stride=2)
input = torch.randn(20, 16, 50)
output = m(input)
在这个示例中,我们创建了一个池化层 m
,其池化大小为 3,步长为 2。然后我们对一个随机生成的输入张量 input
应用这个池化层,并得到了输出张量 output
。
nn.MaxPool2d
是二维最大池化层,广泛用于卷积神经网络来进行空间下采样。它通过在输入张量上应用一个二维滑动窗口,并选择每个窗口中的最大值来工作。以下是它的参数及其解释:
kernel_size
(Union[int, Tuple[int, int]]):执行最大池化的窗口大小。可以是单个整数(在高度和宽度维度上使用相同的值),或一个包含两个整数的元组(第一个整数用于高度维度,第二个用于宽度维度)。stride
(Union[int, Tuple[int, int]]):滑动窗口的步长。默认值是 kernel_size
。同样可以是单个整数或两个整数的元组。padding
(Union[int, Tuple[int, int]]):在输入的两侧隐式添加的负无穷填充。如果为非零,则输入会在两侧各添加指定数量的填充。dilation
(Union[int, Tuple[int, int]]):控制窗口中元素的间距。可以视为窗口中每个点之间的距离。return_indices
(bool):如果为 True,则除了输出最大值外,还会返回它们的索引。这在稍后使用 torch.nn.MaxUnpool2d
时非常有用。ceil_mode
(bool):如果为 True,则在计算输出形状时使用 ceil 而非 floor。这意味着当滑动窗口开始于左侧填充或输入中时,它们可以超出边界。在右侧填充区域开始的滑动窗口将被忽略。例子:
# 创建一个池化层,窗口大小=3,步长=2
m = nn.MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1)
input = torch.randn(20, 16, 50, 32)
output = m(input)
在此示例中,我们定义了一个二维最大池化层 m
,其窗口大小为 3x3,步长为 2,填充为 1,且不扩展窗口(dilation=1)。然后我们对一个随机生成的输入张量 input
应用这个池化层,并得到了输出张量 output
。
nn.MaxPool3d
是三维最大池化层,用于在三维数据(如3D图像或视频帧)上进行空间下采样。以下是它的参数及其解释:
kernel_size (Union[int, Tuple[int, int, int]]):执行最大池化的立方体(或“窗口”)的大小。可以是单个整数(在深度、高度和宽度维度上使用相同的值),或一个包含三个整数的元组(第一个整数用于深度维度,第二个用于高度维度,第三个用于宽度维度)。
stride (Union[int, Tuple[int, int, int]]):滑动窗口的步长。默认值是 kernel_size
。同样可以是单个整数或三个整数的元组。
padding (Union[int, Tuple[int, int, int]]):在输入的所有三侧隐式添加的负无穷填充。填充数量指定了在每个维度上要添加的填充点数。
dilation (Union[int, Tuple[int, int, int]]):控制窗口中元素的间距。这个参数决定了窗口内各点之间的距离。
return_indices (bool):如果为 True,则除了输出最大值外,还会返回它们的索引。这在稍后使用 torch.nn.MaxUnpool3d
时非常有用。
ceil_mode (bool):如果为 True,则在计算输出形状时使用 ceil 而非 floor。这意味着允许滑动窗口超出输入边界,只要它们开始于左侧填充或输入内部。在右侧填充区域开始的滑动窗口将被忽略。
使用 nn.MaxPool3d
的例子:
# 创建一个池化层,窗口大小=3x3x3,步长=2
m = nn.MaxPool3d(kernel_size=3, stride=2, padding=1, dilation=1)
input = torch.randn(20, 16, 50, 44, 32) # 示例输入
output = m(input)
在这个例子中,定义了一个三维最大池化层 m
,其窗口大小为 3x3x3,步长为 2,填充为 1,且不扩展窗口(dilation=1)。然后对一个随机生成的三维输入张量 input
应用这个池化层,得到输出张量 output
。
torch.nn.MaxUnpool1d
是 PyTorch 中的一个类,它实现了 MaxPool1d
的部分逆运算。MaxPool1d
是不完全可逆的,因为在池化过程中非最大值丢失了。MaxUnpool1d
通过接受 MaxPool1d
的输出及最大值的索引,并将所有非最大值设为零,来完成这一部分逆运算。
注意点:
非确定性操作:当输入索引存在重复值时,该操作可能表现出非确定性。这可能会影响模型的重现性。
模糊的反向映射:由于 MaxPool1d
可以将多个不同大小的输入映射到相同大小的输出,因此反向映射过程可能会有歧义。为了解决这个问题,可以在前向传播调用时提供所需的输出大小作为额外的参数 output_size
。
参数:
kernel_size
。输入:
MaxPool1d
提供的最大值索引。示例:
# 创建最大池化和对应的反池化层
pool = nn.MaxPool1d(2, stride=2, return_indices=True)
unpool = nn.MaxUnpool1d(2, stride=2)
# 输入张量
input = torch.tensor([[[1., 2, 3, 4, 5, 6, 7, 8]]])
# 应用池化和反池化
output, indices = pool(input)
unpooled_output = unpool(output, indices)
# 输出: tensor([[[ 0., 2., 0., 4., 0., 6., 0., 8.]]])
# 使用 output_size 的示例
input = torch.tensor([[[1., 2, 3, 4, 5, 6, 7, 8, 9]]])
output, indices = pool(input)
unpooled_output = unpool(output, indices, output_size=input.size())
# 输出: tensor([[[ 0., 2., 0., 4., 0., 6., 0., 8., 0.]]])
????????在这些示例中,首先进行最大池化操作,然后使用 MaxUnpool1d
进行部分逆操作。在第二个示例中,通过指定 output_size
参数,确保反池化输出的尺寸与原始输入一致。
torch.nn.MaxUnpool2d
是 PyTorch 中的一个类,用于实现 MaxPool2d
的部分逆操作。由于 MaxPool2d
在池化过程中丢失了非最大值,因此它不是完全可逆的。MaxUnpool2d
的作用是接受 MaxPool2d
的输出(包括最大值的索引)并计算一个部分逆操作,在这个操作中,所有非最大值被设置为零。
注意事项:
非确定性操作:当输入索引有重复值时,此操作可能表现出非确定性。更多信息见 PyTorch 文档和可重现性指南。
模糊的反向映射:MaxPool2d
可以将多个不同大小的输入映射到相同大小的输出,因此反向映射过程可能会有歧义。为了解决这个问题,可以在前向传播调用时提供所需的输出大小作为额外的参数 output_size
。
参数:
kernel_size
。输入:
MaxPool2d
提供的最大值索引。示例:
# 创建最大池化和对应的反池化层
pool = nn.MaxPool2d(2, stride=2, return_indices=True)
unpool = nn.MaxUnpool2d(2, stride=2)
# 输入张量
input = torch.tensor([[[[ 1., 2., 3., 4.],
[ 5., 6., 7., 8.],
[ 9., 10., 11., 12.],
[13., 14., 15., 16.]]]])
output, indices = pool(input)
unpooled_output = unpool(output, indices)
# 输出: tensor([[[[ 0., 0., 0., 0.],
# [ 0., 6., 0., 8.],
# [ 0., 0., 0., 0.],
# [ 0., 14., 0., 16.]]]])
# 使用 output_size 的示例
input = torch.tensor([[[[ 1., 2., 3., 4., 5.],
[ 6., 7., 8., 9., 10.],
[11., 12., 13., 14., 15.],
[16., 17., 18., 19., 20.]]]])
output, indices = pool(input)
unpooled_output = unpool(output, indices, output_size=input.size())
# 输出: tensor([[[[ 0., 0., 0., 0., 0.],
# [ 0., 7., 0., 9., 0.],
# [ 0., 0., 0., 0., 0.],
# [ 0., 17., 0., 19., 0.]]]])
?在这些示例中,MaxUnpool2d
用于对 MaxPool2d
的结果进行部分逆操作。第二个示例中,通过指定 output_size
参数,确保反池化输出的尺寸与原始输入一致。
torch.nn.MaxUnpool3d
是 PyTorch 中的一个类,用于实现 MaxPool3d
的部分逆操作。由于 MaxPool3d
在池化过程中丢失了非最大值,因此它不是完全可逆的。MaxUnpool3d
的作用是接受 MaxPool3d
的输出(包括最大值的索引)并计算一个部分逆操作,在这个操作中,所有非最大值被设置为零。
注意事项:
非确定性操作:当输入索引有重复值时,此操作可能表现出非确定性。更多信息见 PyTorch 文档和可重现性指南。
模糊的反向映射:MaxPool3d
可以将多个不同大小的输入映射到相同大小的输出,因此反向映射过程可能会有歧义。为了解决这个问题,可以在前向传播调用时提供所需的输出大小作为额外的参数 output_size
。
参数:
kernel_size
。输入:
MaxPool3d
提供的最大值索引。示例:
# 创建最大池化和对应的反池化层
pool = nn.MaxPool3d(3, stride=2, return_indices=True)
unpool = nn.MaxUnpool3d(3, stride=2)
# 输入张量
input = torch.randn(20, 16, 51, 33, 15)
output, indices = pool(input)
unpooled_output = unpool(output, indices)
# 检查反池化后的尺寸
print(unpooled_output.size()) # 输出: torch.Size([20, 16, 51, 33, 15])
?在这个示例中,MaxUnpool3d
用于对 MaxPool3d
的结果进行部分逆操作。通过指定 output_size
参数,可以确保反池化输出的尺寸与原始输入一致。
torch.nn.AvgPool1d
是 PyTorch 中的一个类,用于在一维数据上执行平均池化操作。它通过将输入数据划分为大小固定的窗口,并在每个窗口内计算平均值来降低数据的维度,从而实现池化。
重要特性:
隐式零填充:如果 padding
参数非零,则在输入的两侧隐式地添加零填充。填充的数量由 padding
参数的值决定。
输出形状的计算:
ceil_mode=True
时,使用向上取整而不是向下取整来计算输出的形状。这确保了所有输入元素都被窗口覆盖。参数:
kernel_size
。示例:
# 创建一维平均池化层,窗口大小为3,步长为2
m = nn.AvgPool1d(3, stride=2)
# 输入张量
input = torch.tensor([[[1., 2, 3, 4, 5, 6, 7]]])
# 应用平均池化
output = m(input)
print(output) # 输出: tensor([[[2., 4., 6.]]])
在这个示例中,AvgPool1d
对输入数据进行了平均池化。每个窗口覆盖3个元素,步长为2,因此第一个窗口计算了 [1., 2, 3]
的平均值,第二个窗口计算了 [3, 4, 5]
的平均值,以此类推。由于采用的是平均池化,每个窗口的输出是窗口内元素的平均值。
torch.nn.AvgPool2d
是 PyTorch 中用于二维数据的平均池化层。这个类通过对输入数据应用大小固定的滑动窗口,并计算每个窗口内元素的平均值来降低数据的维度,这种操作通常用于卷积神经网络中降低特征图的空间维度。
主要特性:
隐式零填充:如果 padding
参数非零,则在输入的两侧隐式地添加零填充。填充的数量由 padding
参数的值决定。
输出形状的计算:
ceil_mode=True
时,使用向上取整而不是向下取整来计算输出的形状。这确保了所有输入元素都被窗口覆盖。参数:
kernel_size
。示例:
# 创建二维平均池化层,窗口大小为3x3,步长为2
m = nn.AvgPool2d(3, stride=2)
# 创建二维平均池化层,非方形窗口
m = nn.AvgPool2d((3, 2), stride=(2, 1))
# 输入张量
input = torch.randn(20, 16, 50, 32)
# 应用平均池化
output = m(input)
?在这个示例中,AvgPool2d
对输入数据进行了平均池化。第一个例子中的池化层使用3x3的方形窗口和步长为2,第二个例子使用3x2的非方形窗口和不同的步长。每个窗口覆盖相应大小的元素,并计算这些元素的平均值。这种类型的池化操作常用于减少特征图的空间维度,同时保留重要的特征信息。
torch.nn.AvgPool3d
是 PyTorch 中用于三维数据的平均池化层,主要应用于三维卷积神经网络。这个类通过在输入数据上应用一个固定大小的三维滑动窗口,并计算每个窗口内元素的平均值,以此来降低数据的维度。
主要特性:
隐式零填充:如果 padding
参数非零,输入数据将在所有三个维度上隐式地添加零填充。
输出形状的计算:
ceil_mode=True
时,使用向上取整而不是向下取整来计算输出的形状,确保每个输入元素都被覆盖。参数:
kernel_size
。kernel_size
。示例:
# 创建三维平均池化层,窗口大小为3x3x3,步长为2
m = nn.AvgPool3d(3, stride=2)
# 输入张量
input = torch.randn(20, 16, 51, 33, 15)
# 应用平均池化
output = m(input)
在这个示例中,AvgPool3d
对输入数据进行了三维平均池化。池化层使用3x3x3的立方体窗口和步长为2。每个窗口覆盖相应大小的元素,并计算这些元素的平均值。这种类型的池化操作用于减少三维特征图的空间维度,同时保留关键的特征信息,常见于三维图像处理或视频处理的深度学习应用中。
torch.nn.FractionalMaxPool2d
是 PyTorch 中用于实现二维分数最大池化的类。分数最大池化(Fractional MaxPooling)是一种池化操作,它与传统的最大池化略有不同。在传统的最大池化中,池化窗口的大小和步长是固定的。相比之下,分数最大池化允许使用随机或非整数的步长,从而可以获得不同大小的输出特征图。
主要特性:
随机步长:通过目标输出大小确定的随机步长对输入数据进行池化。
灵活的输出尺寸:可以通过指定输出尺寸或输出比例来控制输出特征图的大小。
参数:
示例:
# 方形窗口大小为3,目标输出尺寸为 13x12
m = nn.FractionalMaxPool2d(3, output_size=(13, 12))
# 输入张量
input = torch.randn(20, 16, 50, 32)
# 应用分数最大池化
output = m(input)
# 方形窗口大小为3,目标输出尺寸为输入尺寸的一半
m = nn.FractionalMaxPool2d(3, output_ratio=(0.5, 0.5))
# 输入张量
input = torch.randn(20, 16, 50, 32)
# 应用分数最大池化
output = m(input)
?在这些示例中,FractionalMaxPool2d 根据指定的输出尺寸或输出比例,使用随机步长对输入张量进行二维最大池化。这种类型的池化操作用于在保留重要特征的同时减少特征图的尺寸,特别适用于需要更细粒度控制输出尺寸的情况。
torch.nn.FractionalMaxPool3d
是 PyTorch 中用于实现三维分数最大池化(Fractional MaxPooling)的类。与二维版本类似,它允许使用随机或非整数的步长来进行池化,从而可以获得不同大小的输出特征图。这种池化操作对于提取三维数据(如体积图像或视频序列)中的特征特别有用。
主要特性:
参数:
示例:
# 立方窗口大小为3,目标输出尺寸为 13x12x11
m = nn.FractionalMaxPool3d(3, output_size=(13, 12, 11))
# 输入张量
input = torch.randn(20, 16, 50, 32, 16)
# 应用分数最大池化
output = m(input)
# 立方窗口大小为3,目标输出尺寸为输入尺寸的一半
m = nn.FractionalMaxPool3d(3, output_ratio=(0.5, 0.5, 0.5))
# 输入张量
input = torch.randn(20, 16, 50, 32, 16)
# 应用分数最大池化
output = m(input)
?在这些示例中,FractionalMaxPool3d 根据指定的输出尺寸或输出比例,使用随机步长对输入张量进行三维最大池化。这种类型的池化操作用于在保留重要特征的同时减少特征图的尺寸,特别适用于处理三维数据或视频内容。
?torch.nn.LPPool1d
是 PyTorch 中用于实现一维 Lp 池化(Lp pooling)的类。这种池化操作是最大池化(Max Pooling)和平均池化(Average Pooling)的泛化形式,它使用 Lp 范数来池化输入数据。
主要特性:
norm_type
参数指定。kernel_size
)和步长(stride
)。参数:
kernel_size
。注意:
示例:
# 二次方平均池化,窗口长度为 3,步长为 2
m = nn.LPPool1d(2, 3, stride=2)
# 输入张量
input = torch.randn(20, 16, 50)
# 应用 Lp 池化
output = m(input)
?在此示例中,LPPool1d 使用 L2 范数(即平方和的平方根)对输入张量的每个一维子区域进行池化。它可以捕获区域内的整体能量或强度,而不是像最大池化那样只关注最大值。这种类型的池化操作用于在保留关键信息的同时减少特征的尺寸,特别适用于处理一维信号数据(如音频波形)。
torch.nn.LPPool2d
是 PyTorch 中用于实现二维 Lp 池化(Lp pooling)的类。这种池化操作是最大池化(Max Pooling)和平均池化(Average Pooling)的泛化形式,它使用 Lp 范数来池化输入数据。
主要特性:
norm_type
参数指定。kernel_size
)和步长(stride
)。参数:
kernel_size
。注意:
示例:
# 二次方平均池化,正方形窗口大小为 3,步长为 2
m = nn.LPPool2d(2, 3, stride=2)
# 非正方形窗口的 1.2 次方平均池化
m = nn.LPPool2d(1.2, (3, 2), stride=(2, 1))
# 输入张量
input = torch.randn(20, 16, 50, 32)
# 应用 Lp 池化
output = m(input)
?在此示例中,LPPool2d 使用 L2 范数(平方和的平方根)对输入张量的每个二维子区域进行池化。这可以捕获区域内的整体能量或强度,而不是像最大池化那样只关注最大值。这种类型的池化操作用于在保留关键信息的同时减少特征的尺寸,特别适用于处理图像和二维信号数据。
torch.nn.AdaptiveMaxPool1d
是 PyTorch 中用于实现一维自适应最大池化(Adaptive Max Pooling)的类。这种池化操作允许模型自动适应不同大小的输入数据,确保输出张量具有特定的大小。
主要特性:
参数:
nn.MaxUnpool1d
进行反池化非常有用。默认为 False。示例:
# 目标输出大小为 5 的自适应最大池化
m = nn.AdaptiveMaxPool1d(5)
# 输入张量,尺寸为 (批次大小, 通道数, 长度)
input = torch.randn(1, 64, 8)
# 应用自适应最大池化
output = m(input)
在此示例中,无论输入张量的长度是多少(在这个例子中是 8),AdaptiveMaxPool1d
都会调整其内部池化窗口的大小,以确保输出张量的长度始终为 5。这种自适应池化方法在处理具有不同长度的时间序列或信号时非常有用,例如在处理不同长度的音频记录或其他一维信号时。通过自适应池化,可以确保网络的后续层总是接收到固定大小的输入,从而简化了模型的设计和优化。
torch.nn.AdaptiveMaxPool2d
是 PyTorch 中用于实现二维自适应最大池化(Adaptive Max Pooling)的类。这种池化操作允许模型自动适应不同尺寸的输入数据,确保输出张量具有特定的尺寸。
主要特性:
参数:
nn.MaxUnpool2d
进行反池化时非常有用。默认为 False。示例:
# 目标输出尺寸为 5x7 的自适应最大池化
m = nn.AdaptiveMaxPool2d((5, 7))
input = torch.randn(1, 64, 8, 9)
output = m(input)
# 目标输出尺寸为 7x7(正方形)的自适应最大池化
m = nn.AdaptiveMaxPool2d(7)
input = torch.randn(1, 64, 10, 9)
output = m(input)
# 目标输出尺寸为 10x7 的自适应最大池化
m = nn.AdaptiveMaxPool2d((None, 7))
input = torch.randn(1, 64, 10, 9)
output = m(input)
?在这些示例中,无论输入张量的高度和宽度是多少,AdaptiveMaxPool2d
都会调整其内部池化窗口的大小,以确保输出张量具有指定的尺寸。这种自适应池化方法在处理具有不同尺寸的图像时非常有用,例如在处理来自不同来源的图像集时。通过自适应池化,可以确保网络的后续层总是接收到固定尺寸的输入,从而简化了模型的设计和优化。
torch.nn.AdaptiveMaxPool3d
是 PyTorch 中的一个类,用于实现三维自适应最大池化(Adaptive Max Pooling)。这种池化操作允许模型自动适应不同尺寸的输入数据,确保输出张量具有特定的尺寸。
主要特性:
参数:
nn.MaxUnpool3d
进行反池化时非常有用。默认为 False。?示例:
# 目标输出尺寸为 5x7x9 的自适应最大池化
m = nn.AdaptiveMaxPool3d((5, 7, 9))
input = torch.randn(1, 64, 8, 9, 10)
output = m(input)
# 目标输出尺寸为 7x7x7(立方体)的自适应最大池化
m = nn.AdaptiveMaxPool3d(7)
input = torch.randn(1, 64, 10, 9, 8)
output = m(input)
# 目标输出尺寸为 7x9x8 的自适应最大池化
m = nn.AdaptiveMaxPool3d((7, None, None))
input = torch.randn(1, 64, 10, 9, 8)
output = m(input)
?在这些示例中,无论输入张量的深度、高度和宽度是多少,AdaptiveMaxPool3d
都会调整其内部池化窗口的大小,以确保输出张量具有指定的尺寸。这种自适应池化方法在处理具有不同尺寸的三维数据时非常有用,例如在医学成像或视频处理领域。通过自适应池化,可以确保网络的后续层总是接收到固定尺寸的输入,从而简化了模型的设计和优化。
torch.nn.AdaptiveAvgPool1d
是 PyTorch 中的一个类,它实现了一维自适应平均池化(Adaptive Average Pooling)。这种池化方式允许模型适应不同长度的输入序列,同时确保输出序列具有固定的长度。
主要特性:
参数:
示例:?
# 目标输出长度为 5 的自适应平均池化
m = nn.AdaptiveAvgPool1d(5)
input = torch.randn(1, 64, 8) # 输入序列长度为 8
output = m(input) # 输出序列长度为 5
?在这个示例中,无论输入序列的长度是多少,AdaptiveAvgPool1d
都会调整其内部池化窗口的大小,以确保输出序列的长度为指定的 5。这种自适应池化方法在处理长度不一的一维数据时非常有用,例如在音频处理或时间序列分析中。通过自适应池化,可以确保网络的后续层总是接收到固定长度的输入,从而简化了模型的设计和优化过程。
torch.nn.AdaptiveAvgPool2d
是 PyTorch 中的一个类,用于实现二维自适应平均池化(Adaptive Average Pooling)。这种池化方式使得模型能够自适应不同尺寸的输入图像,同时确保输出图像具有指定的尺寸。
主要特性:
参数:
输入和输出形状:
示例:
# 目标输出尺寸为 5x7 的自适应平均池化
m = nn.AdaptiveAvgPool2d((5, 7))
input = torch.randn(1, 64, 8, 9)
output = m(input)
# 目标输出尺寸为 7x7(正方形)的自适应平均池化
m = nn.AdaptiveAvgPool2d(7)
input = torch.randn(1, 64, 10, 9)
output = m(input)
# 目标输出尺寸为 10x7 的自适应平均池化
m = nn.AdaptiveAvgPool2d((None, 7))
input = torch.randn(1, 64, 10, 9)
output = m(input)
?在这些示例中,AdaptiveAvgPool2d
通过调整内部池化窗口的大小,确保无论输入图像的尺寸如何,输出图像始终具有指定的尺寸。这在处理不同尺寸的图像时非常有用,例如在图像分类或对象检测任务中。通过自适应池化,可以确保网络的后续层总是接收到固定尺寸的输入,从而简化了模型的设计和优化过程。
torch.nn.AdaptiveAvgPool3d
是 PyTorch 中的一个类,用于实现三维自适应平均池化(Adaptive Average Pooling)。这种池化方式适用于三维数据,例如在医学成像或视频处理中常见的三维体积数据。
主要特性:
参数:
输入和输出形状:
示例:
# 目标输出尺寸为 5x7x9 的自适应平均池化
m = nn.AdaptiveAvgPool3d((5, 7, 9))
input = torch.randn(1, 64, 8, 9, 10)
output = m(input)
# 目标输出尺寸为 7x7x7(立方体)的自适应平均池化
m = nn.AdaptiveAvgPool3d(7)
input = torch.randn(1, 64, 10, 9, 8)
output = m(input)
# 目标输出尺寸为 7x9x8 的自适应平均池化
m = nn.AdaptiveAvgPool3d((7, None, None))
input = torch.randn(1, 64, 10, 9, 8)
output = m(input)
在这些示例中,AdaptiveAvgPool3d
通过调整内部池化窗口的大小,确保无论输入体积的尺寸如何,输出体积始终具有指定的尺寸。这在处理不同尺寸的三维数据时非常有用,例如在体积图像分类或三维对象检测任务中。通过自适应池化,可以确保网络的后续层总是接收到固定尺寸的输入,从而简化了模型的设计和优化过程。
在这篇博客中,我们深入探讨了 PyTorch 中的多种池化层(Pooling layers),它们在深度学习和神经网络中起着至关重要的作用。从基本的最大池化(Max Pooling)到平均池化(Average Pooling),再到更高级的自适应池化(Adaptive Pooling)和分数池化(Fractional Pooling),我们详细解释了每种池化操作的特点、参数和应用场景。这些池化层不仅减少了模型的参数数量,还帮助提高了计算效率,并能够在一定程度上防止过拟合。无论是一维数据(如音频信号),二维数据(如图像),还是三维数据(如体积图像或视频序列),池化层都能够在保持数据的关键特征的同时,有效地降低数据的维度。?