PyTorch 各种池化层函数全览与用法演示

发布时间:2024年01月11日

目录

torch.nn.functional子模块Pooling层详解

avg_pool1d

用法与用途

参数

注意事项

示例代码

avg_pool2d

用法与用途

参数

注意事项

示例代码

avg_pool3d

用法与用途

参数

注意事项

示例代码

max_pool1d

用法与用途

参数

注意事项

示例代码

max_pool2d

用法与用途

参数

注意事项

示例代码

max_pool3d

用法与用途

参数

注意事项

示例代码

max_unpool1d

用法与用途

参数

注意事项

示例代码

max_unpool2d

用法与用途

参数

注意事项

示例代码

max_unpool3d

用法与用途

参数

注意事项

示例代码

lp_pool1d

用法与用途

参数

注意事项

示例代码

lp_pool2d

用法与用途

参数

注意事项

示例代码

adaptive_max_pool1d

用法与用途

参数

注意事项

示例代码

adaptive_max_pool2d

用法与用途

参数

注意事项

示例代码

adaptive_max_pool3d

用法与用途

参数

注意事项

示例代码

adaptive_avg_pool1d

用法与用途

参数

注意事项

示例代码

adaptive_avg_pool2d

用法与用途

参数

注意事项

示例代码

adaptive_avg_pool3d

用法与用途

参数

注意事项

示例代码

fractional_max_pool2d

用法与用途

参数

注意事项

示例代码

fractional_max_pool3d

用法与用途

参数

注意事项

示例代码

总结


torch.nn.functional子模块Pooling层详解

avg_pool1d

torch.nn.functional.avg_pool1d 是 PyTorch 库中的一个函数,用于在一维输入信号上应用平均池化。平均池化是一种降低数据维度、提取特征的常用操作,特别适用于信号处理和时间序列数据。

用法与用途

  • 用法: avg_pool1d 主要用于减小数据的尺寸,同时保留重要信息。通过在输入数据上滑动一个固定大小的窗口,并计算窗口内的平均值来实现。
  • 用途: 在深度学习中,这个操作常用于降低特征图的维度,减少参数数量,从而减少计算量和防止过拟合。

参数

  1. input: 形状为 (minibatch, in_channels, iW) 的输入张量。
  2. kernel_size: 窗口的大小,可以是单个数字或元组 (kW,)
  3. stride: 窗口的步长,可以是单个数字或元组 (sW,)。默认值是 kernel_size
  4. padding: 输入两侧的隐式零填充数量,可以是单个数字或元组 (padW,)。默认值是 0。
  5. ceil_mode: 当为 True 时,使用 ceil 而不是 floor 来计算输出形状。默认值是 False
  6. count_include_pad: 当为 True 时,将零填充包括在平均计算中。默认值是 True

注意事项

  • 确保输入数据的维度与函数要求相符。
  • 调整 kernel_sizestride 可以改变输出数据的大小和特征。
  • ceil_mode 的选择会影响输出的尺寸,可能导致不同的结果。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个一维信号
input = torch.tensor([[[1, 2, 3, 4, 5, 6, 7]]], dtype=torch.float32)

# 应用平均池化,窗口大小为3,步长为2
output = F.avg_pool1d(input, kernel_size=3, stride=2)

print(output)

这段代码首先创建了一个一维的张量作为输入,然后应用了大小为3、步长为2的平均池化。输出结果将是每个窗口内元素的平均值。?

avg_pool2d

torch.nn.functional.avg_pool2d 是 PyTorch 库中的一个函数,用于在二维输入信号上实施平均池化操作。这种操作广泛应用于图像处理和计算机视觉领域,特别是在卷积神经网络中,用于降低特征图的空间维度,同时保留关键信息。

用法与用途

  • 用法: avg_pool2d 通过在输入数据上应用一个固定大小的窗口,并计算该窗口内所有元素的平均值,从而实现数据降维和特征提取。
  • 用途: 在深度学习中,尤其是卷积神经网络中,avg_pool2d 用于减小特征图的空间尺寸,有助于减少模型参数和计算量,同时帮助防止过拟合。

参数

  1. input: 形状为 (minibatch, in_channels, iH, iW) 的输入张量。
  2. kernel_size: 池化区域的大小,可以是单个数字或元组 (kH, kW)
  3. stride: 池化操作的步长,可以是单个数字或元组 (sH, sW)。默认值是 kernel_size
  4. padding: 在输入的两侧添加的隐式零填充数量,可以是单个数字或元组 (padH, padW)。默认值是 0。
  5. ceil_mode: 当设置为 True 时,计算输出形状时将使用 ceil 而非 floor 方法。默认值是 False
  6. count_include_pad: 当设置为 True 时,平均计算中将包括零填充。默认值是 True
  7. divisor_override: 如果指定,将用作除数,否则将使用池化区域的大小。默认值是 None

注意事项

  • 确保输入张量的维度与函数要求相匹配。
  • 通过调整 kernel_sizestride 可以控制输出特征图的大小。
  • ceil_modecount_include_pad 的设置会影响池化操作的结果。
  • divisor_override 参数允许自定义池化过程中的除数,可以用于特殊的池化策略。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个二维信号(例如图像)
input = torch.tensor([[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]], dtype=torch.float32)

# 应用平均池化,池化区域大小为2x2,步长为2
output = F.avg_pool2d(input, kernel_size=2, stride=2)

print(output)

在这个例子中,我们创建了一个二维张量作为输入,然后应用了大小为2x2、步长为2的平均池化。输出结果将是每个池化区域内元素的平均值。?

avg_pool3d

torch.nn.functional.avg_pool3d 是 PyTorch 中的一个函数,用于在三维输入信号上执行平均池化操作。这种操作在处理三维数据(如体积图像或视频序列)时非常有用,它可以减小数据的尺寸,同时保留关键信息。

用法与用途

  • 用法: avg_pool3d 通过在输入数据上应用一个固定大小的三维窗口,并计算该窗口内所有元素的平均值来实现降维和特征提取。
  • 用途: 在处理三维数据(如体积图像、视频序列或时间序列的多个通道)时,avg_pool3d 用于减少数据的空间或时间维度,有助于降低模型的参数数量和计算成本,并帮助防止过拟合。

参数

  1. input: 形状为 (minibatch, in_channels, iT, iH, iW) 的输入张量。
  2. kernel_size: 池化区域的大小,可以是单个数字或三元组 (kT, kH, kW)
  3. stride: 池化操作的步长,可以是单个数字或三元组 (sT, sH, sW)。默认值是 kernel_size
  4. padding: 在输入的所有方向上添加的隐式零填充数量,可以是单个数字或三元组 (padT, padH, padW)。默认值是 0。
  5. ceil_mode: 当设置为 True 时,计算输出形状时将使用 ceil 而非 floor 方法。
  6. count_include_pad: 当设置为 True 时,平均计算中将包括零填充。
  7. divisor_override: 如果指定,将用作除数,否则将使用池化区域的大小。默认值是 None

注意事项

  • 确保输入数据的维度与函数要求相符。
  • 通过调整 kernel_sizestridepadding,可以控制输出数据的大小和特征。
  • ceil_modecount_include_paddivisor_override 的设置会影响池化操作的结果。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个三维信号
input = torch.rand(1, 1, 10, 10, 10)  # 随机生成的输入张量

# 应用平均池化,池化区域大小为2x2x2,步长为2
output = F.avg_pool3d(input, kernel_size=2, stride=2)

print(output)

这段代码创建了一个三维的随机张量作为输入,然后应用了大小为2x2x2、步长为2的平均池化。输出结果将是每个池化区域内元素的平均值。这种操作在处理具有时间维度的数据或更高维度的图像数据时特别有用。?

max_pool1d

torch.nn.functional.max_pool1d 是 PyTorch 中用于一维输入信号的最大池化操作的函数。最大池化是一种常见的特征提取操作,它在处理时间序列数据或一维信号时非常有用。

用法与用途

  • 用法: max_pool1d 通过在输入数据上应用一个固定大小的窗口,并从该窗口内选择最大值,从而实现特征降维和突出重要特征。
  • 用途: 在信号处理和一维时间序列数据分析中,最大池化用于减少数据的尺寸,同时保留关键特征,例如在音频处理和自然语言处理中。

参数

  1. input: 形状为 (minibatch, in_channels, iW) 的输入张量。minibatch 维度是可选的。
  2. kernel_size: 滑动窗口的大小。可以是单个数字或元组 (kW,)
  3. stride: 滑动窗口的步长。可以是单个数字或元组 (sW,)。默认值是 kernel_size
  4. padding: 在两边添加的隐含负无穷大的填充。其值必须在 0kernel_size / 2 之间。
  5. dilation: 滑动窗口内元素的步长。必须大于 0
  6. ceil_mode: 如果为 True,将使用 ceil 而非 floor 来计算输出形状。这确保了输入张量的每个元素都被滑动窗口覆盖。
  7. return_indices: 如果为 True,将返回最大值的位置索引。这在以后使用 torch.nn.functional.max_unpool1d 时非常有用。

注意事项

  • 确保输入数据的维度与函数要求相符。
  • 适当选择 kernel_sizestride 可以影响输出数据的尺寸和特征。
  • paddingdilationceil_mode 的设置会影响池化操作的结果。
  • return_indices 选项可以用于在后续操作中恢复池化前的数据结构。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个一维信号
input = torch.tensor([[[1, 2, 3, 4, 5, 6, 7]]], dtype=torch.float32)

# 应用最大池化,窗口大小为3,步长为2
output = F.max_pool1d(input, kernel_size=3, stride=2)

print(output)

这段代码创建了一个一维的张量作为输入,然后应用了大小为3、步长为2的最大池化。输出结果将是每个窗口内的最大值。这种操作在提取时间序列数据的关键特征时特别有效。?

max_pool2d

torch.nn.functional.max_pool2d 是 PyTorch 库中的一个函数,用于在二维输入信号上实施最大池化操作。最大池化是一种常用的特征提取操作,尤其在处理图像或二维数据时非常有用。

用法与用途

  • 用法: max_pool2d 通过在输入数据上应用一个固定大小的二维窗口,并从该窗口内选择最大值,来实现特征降维和突出重要特征。
  • 用途: 在图像处理和计算机视觉领域,最大池化用于减少数据的空间尺寸,同时保留重要特征,例如在卷积神经网络中用于特征图的降维。

参数

  1. input: 形状为 (minibatch, in_channels, iH, iW) 的输入张量。minibatch 维度是可选的。
  2. kernel_size: 池化区域的大小。可以是单个数字或元组 (kH, kW)
  3. stride: 池化操作的步长。可以是单个数字或元组 (sH, sW)。默认值是 kernel_size
  4. padding: 在两边添加的隐含负无穷大的填充。其值必须在 0kernel_size / 2 之间。
  5. dilation: 滑动窗口内元素的步长。必须大于 0
  6. ceil_mode: 如果为 True,将使用 ceil 而非 floor 来计算输出形状。这确保了输入张量的每个元素都被滑动窗口覆盖。
  7. return_indices: 如果为 True,将返回最大值的位置索引。这在以后使用 torch.nn.functional.max_unpool2d 时非常有用。

注意事项

  • 确保输入数据的维度与函数要求相符。
  • 适当选择 kernel_sizestride 可以影响输出数据的尺寸和特征。
  • paddingdilationceil_mode 的设置会影响池化操作的结果。
  • return_indices 选项可以用于在后续操作中恢复池化前的数据结构。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个二维信号(例如图像)
input = torch.tensor([[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]], dtype=torch.float32)

# 应用最大池化,池化区域大小为2x2,步长为2
output = F.max_pool2d(input, kernel_size=2, stride=2)

print(output)

?这段代码创建了一个二维的张量作为输入,然后应用了大小为2x2、步长为2的最大池化。输出结果将是每个池化区域内的最大值。这种操作在提取图像中的关键特征时特别有效。

max_pool3d

torch.nn.functional.max_pool3d 是 PyTorch 库中的一个函数,用于对三维输入信号进行最大池化操作。这种操作在处理三维数据(如体积图像、视频序列)时非常有用,能够减小数据的尺寸,同时突出重要特征。

用法与用途

  • 用法: max_pool3d 通过在输入数据上应用一个固定大小的三维窗口,并从该窗口内选择最大值,来实现特征降维和突出重要特征。
  • 用途: 在处理三维数据,如体积图像、三维医学图像或视频序列时,最大池化用于减少数据的空间或时间维度,有助于降低模型的参数数量和计算成本,并帮助防止过拟合。

参数

  1. input: 形状为 (minibatch, in_channels, iD, iH, iW) 的输入张量。minibatch 维度是可选的。
  2. kernel_size: 池化区域的大小。可以是单个数字或元组 (kT, kH, kW)
  3. stride: 池化操作的步长。可以是单个数字或元组 (sT, sH, sW)。默认值是 kernel_size
  4. padding: 在所有方向上添加的隐含负无穷大的填充。其值必须在 0kernel_size / 2 之间。
  5. dilation: 滑动窗口内元素的步长。必须大于 0
  6. ceil_mode: 如果为 True,将使用 ceil 而非 floor 来计算输出形状。这确保了输入张量的每个元素都被滑动窗口覆盖。
  7. return_indices: 如果为 True,将返回最大值的位置索引。这在以后使用 torch.nn.functional.max_unpool3d 时非常有用。

注意事项

  • 确保输入数据的维度与函数要求相符。
  • 适当选择 kernel_sizestride 可以影响输出数据的尺寸和特征。
  • paddingdilationceil_mode 的设置会影响池化操作的结果。
  • return_indices 选项可以用于在后续操作中恢复池化前的数据结构。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个三维信号
input = torch.rand(1, 1, 10, 10, 10)  # 随机生成的输入张量

# 应用最大池化,池化区域大小为2x2x2,步长为2
output = F.max_pool3d(input, kernel_size=2, stride=2)

print(output)

这段代码创建了一个三维的随机张量作为输入,然后应用了大小为2x2x2、步长为2的最大池化。输出结果将是每个池化区域内的最大值。这种操作在提取三维数据的关键特征时特别有效。?

max_unpool1d

torch.nn.functional.max_unpool1d 是 PyTorch 库中用于计算 MaxPool1d 的部分逆操作的函数。这个函数主要用于将通过 MaxPool1d 操作减小的一维数据重新上采样(即还原)到接近原始尺寸的形状。

用法与用途

  • 用法: max_unpool1d 通过使用 MaxPool1d 操作中保存的最大值的索引(indices),将数据“展开”回更接近原始尺寸的形状。这个过程常用于卷积神经网络(CNN)中的上采样阶段。
  • 用途: 在卷积神经网络的可视化、深度学习模型的解码阶段或者在进行精确位置恢复的任务中,这个函数特别有用。

参数

  1. input: 经过 MaxPool1d 操作后的输入张量。
  2. indices: 在 MaxPool1d 操作中得到的最大值索引,用于指导上采样过程。
  3. kernel_size: 最初池化操作中使用的窗口大小。可以是单个数字或元组。
  4. stride: 最初池化操作中使用的步长。可以是单个数字或元组。如果未指定,则默认为 kernel_size
  5. padding: 最初池化操作中使用的填充量。
  6. output_size: 期望的输出尺寸。如果未指定,则根据其他参数自动计算。

注意事项

  • 确保 inputindices 来自相同的 MaxPool1d 操作。
  • 正确设置 kernel_sizestridepadding,以确保上采样结果的正确性。
  • 如果指定了 output_size,需要确保它与期望的上采样结果尺寸相匹配。

示例代码

import torch
import torch.nn.functional as F

# 示例输入和池化操作
input = torch.tensor([[[1, 2, 3, 4, 5, 6, 7]]], dtype=torch.float32)
input, indices = F.max_pool1d(input, kernel_size=2, stride=2, return_indices=True)

# 应用 max_unpool1d 进行上采样
output = F.max_unpool1d(input, indices, kernel_size=2, stride=2)

print(output)

?在这个例子中,首先应用了 max_pool1d 来对输入数据进行下采样,并保存了最大值的索引。然后,使用 max_unpool1d 以及这些索引来上采样数据,尝试还原到接近其原始尺寸的形状。

max_unpool2d

torch.nn.functional.max_unpool2d 是 PyTorch 中的一个函数,它实现了 MaxPool2d 操作的部分逆过程。这种函数主要用于将经过 MaxPool2d 减小的二维数据重新上采样(即还原)到接近原始尺寸的形状。

用法与用途

  • 用法: max_unpool2d 使用 MaxPool2d 操作时保留的最大值的索引(indices),将数据“展开”回更接近原始尺寸的形状。这个过程常用于卷积神经网络(CNN)中的上采样阶段。
  • 用途: 在卷积神经网络的可视化、深度学习模型的解码阶段或者在进行精确位置恢复的任务中,这个函数特别有用。

参数

  1. input: 经过 MaxPool2d 操作后的输入张量。
  2. indices: 在 MaxPool2d 操作中得到的最大值索引,用于指导上采样过程。
  3. kernel_size: 最初池化操作中使用的窗口大小。可以是单个数字或元组。
  4. stride: 最初池化操作中使用的步长。可以是单个数字或元组。如果未指定,则默认为 kernel_size
  5. padding: 最初池化操作中使用的填充量。
  6. output_size: 期望的输出尺寸。如果未指定,则根据其他参数自动计算。

注意事项

  • 确保 inputindices 来自相同的 MaxPool2d 操作。
  • 正确设置 kernel_sizestridepadding,以确保上采样结果的正确性。
  • 如果指定了 output_size,需要确保它与期望的上采样结果尺寸相匹配。

示例代码

import torch
import torch.nn.functional as F

# 示例输入和池化操作
input = torch.tensor([[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]], dtype=torch.float32)
input, indices = F.max_pool2d(input, kernel_size=2, stride=2, return_indices=True)

# 应用 max_unpool2d 进行上采样
output = F.max_unpool2d(input, indices, kernel_size=2, stride=2)

print(output)

?在这个例子中,首先应用了 max_pool2d 来对输入数据进行下采样,并保存了最大值的索引。然后,使用 max_unpool2d 以及这些索引来上采样数据,尝试还原到接近其原始尺寸的形状。

max_unpool3d

torch.nn.functional.max_unpool3d 是 PyTorch 库中的一个函数,用于实现 MaxPool3d 操作的部分逆过程。这个函数主要应用于将经过 MaxPool3d 操作降维的三维数据重新上采样(即还原)到更接近原始尺寸的形状。

用法与用途

  • 用法: max_unpool3d 利用在 MaxPool3d 操作中获得的最大值的索引(indices),将数据“展开”回原来更大的尺寸。这在卷积神经网络(CNN)的上采样阶段特别有用。
  • 用途: 在深度学习模型的解码阶段、进行三维数据的重建或精确位置恢复任务中,max_unpool3d 非常有用。例如,在处理三维医学图像或视频数据时,它可以用于还原数据的空间结构。

参数

  1. input: 经过 MaxPool3d 操作后的输入张量。
  2. indices: 在 MaxPool3d 操作中得到的最大值索引,用于指导上采样过程。
  3. kernel_size: 最初池化操作中使用的窗口大小。可以是单个数字或元组。
  4. stride: 最初池化操作中使用的步长。可以是单个数字或元组。如果未指定,则默认为 kernel_size
  5. padding: 最初池化操作中使用的填充量。
  6. output_size: 期望的输出尺寸。如果未指定,则根据其他参数自动计算。

注意事项

  • 确保 inputindices 来自相同的 MaxPool3d 操作。
  • 正确设置 kernel_sizestridepadding,以确保上采样结果的正确性。
  • 如果指定了 output_size,需要确保它与期望的上采样结果尺寸相匹配。

示例代码

import torch
import torch.nn.functional as F

# 示例输入和池化操作
input = torch.rand(1, 1, 4, 4, 4)  # 随机生成的输入张量
input, indices = F.max_pool3d(input, kernel_size=2, stride=2, return_indices=True)

# 应用 max_unpool3d 进行上采样
output = F.max_unpool3d(input, indices, kernel_size=2, stride=2)

print(output)

在这个例子中,首先应用了 max_pool3d 来对输入数据进行下采样,并保存了最大值的索引。然后,使用 max_unpool3d 以及这些索引来上采样数据,尝试还原到接近其原始尺寸的形状。这对于三维数据的处理尤其有用,例如在医学图像分析或视频处理中。?

lp_pool1d

torch.nn.functional.lp_pool1d 是 PyTorch 中的一个函数,用于在一维输入信号上应用 Lp 池化(Lp-pooling)。Lp 池化是一种通用的池化操作,它包括平均池化和最大池化作为特例(分别对应于 L1 和 L∞ 池化)。

用法与用途

  • 用法: lp_pool1d 通过计算输入信号中一定区域内的所有元素的 Lp 范数来实现池化。Lp 范数是一种度量向量元素绝对值的方法,其中 p 是一个正实数。
  • 用途: Lp 池化在信号处理和一维时间序列数据分析中特别有用,它提供了一种比平均池化和最大池化更灵活的方法来提取特征。

参数

  1. input: 形状为 (minibatch, in_channels, iW) 的输入张量。
  2. norm_type: Lp 范数的 p 值。常见的选择包括 1(L1 范数,相当于平均池化)和 ∞(L∞ 范数,相当于最大池化)。
  3. kernel_size: 池化窗口的大小。可以是单个数字。
  4. stride: 池化操作的步长。可以是单个数字。如果未指定,则默认为 kernel_size
  5. ceil_mode: 如果为 True,将使用 ceil 而非 floor 来计算输出形状。

注意事项

  • 确保 input 的尺寸和类型符合预期。
  • 选择合适的 norm_type 可以根据具体的应用场景调整池化的行为。
  • 正确设置 kernel_sizestride 可以控制输出的尺寸。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个一维信号
input = torch.tensor([[[1, 2, 3, 4, 5, 6, 7]]], dtype=torch.float32)

# 应用 Lp 池化,L2 范数,窗口大小为3,步长为2
output = F.lp_pool1d(input, norm_type=2, kernel_size=3, stride=2)

print(output)

?在这个例子中,我们应用了 L2 范数的 Lp 池化,其中窗口大小为 3,步长为 2。这种类型的池化有助于在保留重要信号特征的同时降低数据维度。

lp_pool2d

torch.nn.functional.lp_pool2d 是 PyTorch 中的一个函数,用于在二维输入信号上实施 Lp 池化(Lp-pooling)。Lp 池化是一种更通用的池化方法,它包括了平均池化和最大池化作为其特例。

用法与用途

  • 用法: lp_pool2d 通过计算输入信号中的每个固定大小区域内所有元素的 Lp 范数来实现池化。这里的 Lp 范数是指向量元素绝对值的 p 次方和的 p 次方根。
  • 用途: Lp 池化在图像处理和计算机视觉领域中非常有用,因为它提供了一种比平均池化和最大池化更灵活的方法来提取特征。

参数

  1. input: 形状为 (minibatch, in_channels, iH, iW) 的输入张量。
  2. norm_type: Lp 范数的 p 值。常见选择包括 1(L1 范数,相当于平均池化)和 ∞(L∞ 范数,相当于最大池化)。
  3. kernel_size: 池化区域的大小。可以是单个数字或元组 (kH, kW)
  4. stride: 池化操作的步长。可以是单个数字或元组 (sH, sW)。如果未指定,则默认为 kernel_size
  5. ceil_mode: 如果为 True,将使用 ceil 而非 floor 来计算输出形状。

注意事项

  • 确保输入数据的尺寸和类型符合预期。
  • 选择合适的 norm_type 可以根据具体应用场景调整池化的行为。
  • 正确设置 kernel_sizestride 可以控制输出数据的尺寸。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个二维信号(例如图像)
input = torch.tensor([[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]], dtype=torch.float32)

# 应用 Lp 池化,L2 范数,池化区域大小为2x2
output = F.lp_pool2d(input, norm_type=2, kernel_size=2)

print(output)

在这个例子中,我们应用了 L2 范数的 Lp 池化,其中池化区域大小为 2x2。这种类型的池化有助于在保留重要图像特征的同时降低数据维度。

adaptive_max_pool1d

torch.nn.functional.adaptive_max_pool1d 是 PyTorch 中的一个函数,用于在一维输入信号上实施自适应最大池化操作。自适应池化是一种特殊类型的池化,它能够独立于输入尺寸,输出固定大小的特征图。

用法与用途

  • 用法: adaptive_max_pool1d 通过调整池化窗口的大小来确保输出特征图具有指定的目标尺寸。这意味着它可以处理各种尺寸的输入,而输出始终保持一致的尺寸。
  • 用途: 在处理不同长度的一维信号(如音频片段、时间序列数据)时,自适应最大池化特别有用,因为它允许神经网络在不同长度的输入上运行,而不需要对输入数据进行手动调整。

参数

  1. input: 形状为 (minibatch, in_channels, iW) 的输入张量。
  2. output_size: 目标输出尺寸,是一个单独的整数。这个值指定了输出特征图的长度。
  3. return_indices: 是否返回池化过程中最大值的索引。默认值为 False

注意事项

  • 自适应池化不需要指定池化窗口的大小和步长,因为它会根据输入和目标输出尺寸自动确定这些参数。
  • 如果设置 return_indicesTrue,函数将返回最大值的索引,这对于某些特殊应用(如上采样操作)可能很有用。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个一维信号
input = torch.tensor([[[1, 2, 3, 4, 5, 6, 7, 8, 9]]], dtype=torch.float32)

# 应用自适应最大池化,目标输出长度为5
output = F.adaptive_max_pool1d(input, output_size=5)

print(output)

在这个例子中,输入是一个长度为 9 的一维信号,而目标输出长度被设定为 5。adaptive_max_pool1d 会自动调整池化窗口的大小和步长,使得输出特征图的长度为 5。这对于需要固定尺寸输出的应用场景非常有用。?

adaptive_max_pool2d

torch.nn.functional.adaptive_max_pool2d 是 PyTorch 库中的一个函数,用于在二维输入信号上执行自适应最大池化操作。这种池化操作可以适应不同大小的输入,输出固定大小的特征图。

用法与用途

  • 用法: adaptive_max_pool2d 通过自动调整池化窗口的大小和步长,从而确保无论输入信号的尺寸如何,输出特征图都具有指定的目标尺寸。
  • 用途: 在处理不同尺寸的图像或其他二维数据时,自适应最大池化特别有用。它允许神经网络在不同尺寸的输入上运行,而不需要手动调整输入数据的尺寸。

参数

  1. input: 形状为 (minibatch, in_channels, iH, iW) 的输入张量。
  2. output_size: 目标输出尺寸。可以是单个整数(生成正方形的输出)或双整数元组 (oH, oW)
  3. return_indices: 是否返回池化过程中最大值的索引。默认值为 False

注意事项

  • 自适应池化不需要显式指定池化窗口的大小和步长,因为它根据输入和目标输出尺寸自动确定这些参数。
  • 如果设置 return_indicesTrue,函数将返回最大值的索引,这对于某些特殊应用(如上采样操作)可能很有用。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个二维信号(例如图像)
input = torch.rand(1, 1, 8, 8)  # 随机生成一个 8x8 的输入张量

# 应用自适应最大池化,目标输出尺寸为 (4, 4)
output = F.adaptive_max_pool2d(input, output_size=(4, 4))

print(output)

在这个例子中,输入是一个 8x8 的二维信号,目标输出尺寸被设定为 4x4。adaptive_max_pool2d 会自动调整池化窗口的大小和步长,以确保输出特征图的尺寸为 4x4。这种方法在需要将不同尺寸的输入标准化到相同尺寸输出的场景中非常有用。?

adaptive_max_pool3d

torch.nn.functional.adaptive_max_pool3d 是 PyTorch 库中的一个函数,用于在三维输入信号上进行自适应最大池化操作。这种池化技术可以适应不同大小的输入,生成固定大小的输出特征图。

用法与用途

  • 用法: adaptive_max_pool3d 自动调整池化窗口的大小和步长,以确保输出特征图符合指定的目标尺寸,独立于输入信号的原始尺寸。
  • 用途: 在处理三维数据(如体积图像、视频序列等)时,自适应最大池化尤其有用,因为它允许网络处理不同尺寸的输入数据,同时保证输出特征图的一致性。

参数

  1. input: 形状为 (minibatch, in_channels, iD, iH, iW) 的输入张量。
  2. output_size: 目标输出尺寸。可以是单个整数(生成立方体形状的输出)或三整数元组 (oD, oH, oW)
  3. return_indices: 是否返回池化过程中最大值的索引。默认值为 False

注意事项

  • 自适应池化不需要显式地指定池化窗口的大小和步长,因为这些参数会根据输入和目标输出尺寸自动确定。
  • 如果设置 return_indicesTrue,函数会返回最大值的索引,这在某些特定应用中(例如在后续步骤中进行上采样操作)可能非常有用。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个三维信号
input = torch.rand(1, 1, 8, 8, 8)  # 随机生成一个 8x8x8 的输入张量

# 应用自适应最大池化,目标输出尺寸为 (4, 4, 4)
output = F.adaptive_max_pool3d(input, output_size=(4, 4, 4))

print(output)

?在这个例子中,输入是一个 8x8x8 的三维信号,目标输出尺寸被设定为 4x4x4。adaptive_max_pool3d 会自动调整池化窗口的大小和步长,以确保输出特征图的尺寸为 4x4x4。这种方法在需要将不同尺寸的输入标准化为相同尺寸输出的场景中非常有用。

adaptive_avg_pool1d

torch.nn.functional.adaptive_avg_pool1d 是 PyTorch 库中的一个函数,用于对一维输入信号执行自适应平均池化操作。这种池化方法允许输入信号有不同的长度,但可以输出统一大小的特征表示。

用法与用途

  • 用法: adaptive_avg_pool1d 通过自动调整池化窗口的大小来生成指定长度的输出,无论输入信号的原始长度如何。
  • 用途: 在处理长度不一的一维信号时(如音频片段或时间序列数据),自适应平均池化特别有用。它使得神经网络可以接收不同长度的输入数据,同时生成固定大小的输出。

参数

  • input: 形状为 (minibatch, in_channels, iW) 的输入张量。
  • output_size: 目标输出尺寸。这是一个整数,指定了输出特征表示的长度。

注意事项

  • 自适应池化不需要指定池化窗口的具体大小和步长,因为它会根据输入尺寸和输出尺寸自动计算这些值。
  • 这种方法非常适用于输入数据长度变化较大的场景,可以帮助标准化输出尺寸,便于后续处理。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个一维信号
input = torch.tensor([[[1, 2, 3, 4, 5, 6, 7, 8, 9]]], dtype=torch.float32)

# 应用自适应平均池化,目标输出长度为5
output = F.adaptive_avg_pool1d(input, output_size=5)

print(output)

?在这个例子中,输入是一个长度为 9 的一维信号,而目标输出长度被设定为 5。adaptive_avg_pool1d 会自动调整池化窗口的大小,以确保输出特征图的长度为 5。这种方法在需要处理不同长度输入数据的应用场景中非常有用。

adaptive_avg_pool2d

torch.nn.functional.adaptive_avg_pool2d 是 PyTorch 库中用于执行二维自适应平均池化操作的函数。这个操作允许对具有不同尺寸的输入图像执行池化操作,同时生成具有固定尺寸的输出。

用法与用途

  • 用法: adaptive_avg_pool2d 通过自动调整池化窗口的大小和步长,实现从不同尺寸的输入图像到固定尺寸输出的转换。
  • 用途: 在处理尺寸不一的图像数据时,这种方法非常有用,例如在深度学习中处理不同尺寸的输入图像,而不需要预先调整其尺寸。

参数

  • input: 形状为 (minibatch, in_channels, iH, iW) 的输入张量。
  • output_size: 目标输出尺寸。可以是单个整数(生成正方形的输出)或者双整数元组 (oH, oW)

注意事项

  • 当使用单个整数作为 output_size 时,输出特征图将是一个正方形,其大小由该整数指定。
  • 使用双整数元组时,可以更精确地控制输出特征图的高度和宽度。
  • 自适应池化方法不需要手动指定池化窗口的大小和步长,因为它会根据输入和输出尺寸自动计算这些参数。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个二维信号(例如图像)
input = torch.rand(1, 1, 8, 8)  # 随机生成一个 8x8 的输入张量

# 应用自适应平均池化,目标输出尺寸为 (4, 4)
output = F.adaptive_avg_pool2d(input, output_size=(4, 4))

print(output)

?在这个例子中,输入是一个 8x8 的二维信号,目标输出尺寸被设定为 4x4。adaptive_avg_pool2d 会自动调整池化窗口的大小和步长,以确保输出特征图的尺寸为 4x4。这种方法在需要将不同尺寸的输入标准化为相同尺寸输出的场景中非常有用。

adaptive_avg_pool3d

torch.nn.functional.adaptive_avg_pool3d 是 PyTorch 库中的一个函数,用于对三维输入信号执行自适应平均池化操作。这种操作允许对具有不同尺寸的三维数据(如体积图像或视频序列)进行池化处理,同时生成具有固定尺寸的输出。

用法与用途

  • 用法: adaptive_avg_pool3d 通过自动调整池化窗口的大小和步长,实现从不同尺寸的输入到固定尺寸输出的转换。
  • 用途: 在处理体积图像、三维医学成像数据或视频序列等三维数据时,这种方法非常有用,因为它允许网络处理不同尺寸的输入数据,同时保证输出特征图的一致性。

参数

  • input: 形状为 (minibatch, in_channels, iD, iH, iW) 的输入张量。
  • output_size: 目标输出尺寸。可以是单个整数(生成立方体形状的输出)或三整数元组 (oD, oH, oW)

注意事项

  • 当使用单个整数作为 output_size 时,输出特征图将是一个立方体,其大小由该整数指定。
  • 使用三整数元组时,可以更精确地控制输出特征图的深度、高度和宽度。
  • 自适应池化方法不需要手动指定池化窗口的大小和步长,因为它会根据输入和输出尺寸自动计算这些参数。

示例代码

import torch
import torch.nn.functional as F

# 示例输入,一个三维信号
input = torch.rand(1, 1, 8, 8, 8)  # 随机生成一个 8x8x8 的输入张量

# 应用自适应平均池化,目标输出尺寸为 (4, 4, 4)
output = F.adaptive_avg_pool3d(input, output_size=(4, 4, 4))

print(output)

在这个例子中,输入是一个 8x8x8 的三维信号,目标输出尺寸被设定为 4x4x4。adaptive_avg_pool3d 会自动调整池化窗口的大小和步长,以确保输出特征图的尺寸为 4x4x4。这种方法在需要将不同尺寸的输入标准化为相同尺寸输出的场景中非常有用。?

fractional_max_pool2d

torch.nn.functional.fractional_max_pool2d 是 PyTorch 库中的一个函数,用于对二维输入信号执行分数最大池化操作。这种池化操作与传统的最大池化不同,它允许使用随机或非整数步长,从而产生非标准尺寸的输出。

用法与用途

  • 用法: fractional_max_pool2d 通过使用随机或分数步长在输入上进行池化,以生成目标输出尺寸或与输入尺寸成比例的输出。
  • 用途: 在深度学习中,尤其是在图像处理和计算机视觉任务中,分数最大池化可以用于创建更加丰富和多样的特征表示,有助于提高模型的泛化能力。

参数

  1. input: 形状为 (minibatch, in_channels, iH, iW) 的输入张量。
  2. kernel_size: 池化区域的大小。可以是单个整数(对于正方形的池化窗口)或元组 (kH, kW)
  3. output_size: 目标输出尺寸,形式为 (oH, oW)。也可以是单个整数,用于创建正方形输出。
  4. output_ratio: 如果希望输出尺寸作为输入尺寸的比例,可以使用这个参数。它必须是范围在 (0, 1) 内的数字或元组。
  5. return_indices: 如果为 True,将返回池化过程中最大值的索引,可用于后续的 max_unpool2d 操作。

注意事项

  • 分数最大池化的随机性可能导致不同的运行结果有所不同。
  • 确保选择合适的 kernel_sizeoutput_sizeoutput_ratio,以达到期望的池化效果。
  • 如果需要使用 max_unpool2d 进行反池化操作,需要设置 return_indicesTrue

示例代码

import torch
import torch.nn.functional as F

# 示例输入
input = torch.randn(20, 16, 50, 32)

# 应用分数最大池化,窗口大小为3,目标输出尺寸为 13x12
output = F.fractional_max_pool2d(input, kernel_size=3, output_size=(13, 12))

# 应用分数最大池化,窗口大小为3,输出尺寸为输入尺寸的一半
output_ratio = F.fractional_max_pool2d(input, kernel_size=3, output_ratio=(0.5, 0.5))

?在这些示例中,输入是一个具有随机值的张量,我们应用了分数最大池化来减小其尺寸。第一个例子直接指定了输出尺寸,而第二个例子使用了输出比例来决定输出尺寸。这种方法为特征提取提供了更多的灵活性。

fractional_max_pool3d

torch.nn.functional.fractional_max_pool3d 是 PyTorch 库中的一个函数,用于在三维输入信号上实施分数最大池化操作。这种池化操作与传统的最大池化不同,它允许使用随机或非整数的步长,从而产生非标准尺寸的输出。

用法与用途

  • 用法: fractional_max_pool3d 通过使用随机或分数步长在输入上进行池化,以生成目标输出尺寸或与输入尺寸成比例的输出。
  • 用途: 在深度学习中,尤其是在三维数据处理(如体积图像或视频序列)中,分数最大池化可以用于创建更加丰富和多样化的特征表示,有助于提高模型的泛化能力。

参数

  1. input: 形状为 (N, C, T_in, H_in, W_in)(C, T_in, H_in, W_in) 的输入张量。
  2. kernel_size: 池化区域的大小。可以是单个整数(对于立方体的池化窗口)或元组 (kT, kH, kW)
  3. output_size: 目标输出尺寸,形式为 (oT, oH, oW)。也可以是单个整数,用于创建立方体输出。
  4. output_ratio: 如果希望输出尺寸作为输入尺寸的比例,可以使用这个参数。它必须是范围在 (0, 1) 内的数字或元组。
  5. return_indices: 如果为 True,将返回池化过程中最大值的索引,可用于后续的 max_unpool3d 操作。

注意事项

  • 分数最大池化的随机性可能导致不同的运行结果有所不同。
  • 确保选择合适的 kernel_sizeoutput_sizeoutput_ratio,以达到期望的池化效果。
  • 如果需要使用 max_unpool3d 进行反池化操作,需要设置 return_indicesTrue

示例代码

import torch
import torch.nn.functional as F

# 示例输入
input = torch.randn(20, 16, 50, 32, 16)

# 应用分数最大池化,窗口大小为3,目标输出尺寸为 13x12x11
output = F.fractional_max_pool3d(input, kernel_size=3, output_size=(13, 12, 11))

# 应用分数最大池化,窗口大小为3,输出尺寸为输入尺寸的一半
output_ratio = F.fractional_max_pool3d(input, kernel_size=3, output_ratio=(0.5, 0.5, 0.5))

?在这些示例中,输入是一个具有随机值的张量,我们应用了分数最大池化来减小其尺寸。第一个例子直接指定了输出尺寸,而第二个例子使用了输出比例来决定输出尺寸。这种方法为特征提取提供了更多的灵活性。

总结

在 PyTorch 中,池化层函数是卷积神经网络(CNN)中的重要组成部分,用于降维、特征提取和防止过拟合。这些函数包括不同类型和维度的池化操作,如平均池化、最大池化和自适应池化,适用于处理一维、二维和三维数据。每种池化操作都有其特定的应用场景和参数设置,提供了灵活性以适应不同的深度学习需求。

文章来源:https://blog.csdn.net/qq_42452134/article/details/135517533
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。