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

目录

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)中的重要组成部分,用于降维、特征提取和防止过拟合。这些函数包括不同类型和维度的池化操作,如平均池化、最大池化和自适应池化,适用于处理一维、二维和三维数据。每种池化操作都有其特定的应用场景和参数设置,提供了灵活性以适应不同的深度学习需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Selenium自动化测试面试必备:高频面试题及答案整理

自动化测试已经成为现代软件测试中不可或缺的一部分。在自动化测试中,Selenium是最受欢迎的工具之一,因为它可以模拟用户与Web应用程序的交互。因此,对于许多测试工程师来说,熟练掌握Selenium框架是非常重要的。如果你正在寻找一份…

外汇天眼:Broadridge与Boring Money合作推出资产管理公司的消费者责任解决方案

Boring Money,一家金融数据和见解公司,与全球金融科技领导者Broadridge Financial Solutions, Inc. (NYSE:BR)合作,为资产管理公司提供了一个汇总产品分析和消费者视角的数据与见解的单一信息源,从而全面满足英国《消费者义务》法…

代码随想录算法训练营Day23|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

目录 669. 修剪二叉搜索树 前言 思路 递归法 108.将有序数组转换为二叉搜索树 前言 递归法 538.把二叉搜索树转换为累加树 前言 递归法 总结 669. 修剪二叉搜索树 题目链接 文章链接 前言 本题承接昨天二叉搜索树的插入和删除操作题目,要对整棵二叉搜索树…

Ubuntu16.04升级到18.04--检查更新时出现问题--解决方法

一开始装Ubuntu时装的是16.04,后来装cuda时,发现核是4.15的,需要升级到18.04,于是输入sudo do-release-upgrade更新时,发现错误: no module named DistUpgrade google后发现帖子: https://ask…

移动通信系统关键技术多址接入OFDM学习(7)

1.OFDM是一种多载波传输方案,可以将高速串行传输转换为低速并行传输,增加符号持续时间,抗多径干扰能力强。 串行和并行有着不同的比特持续时间,同时拥有相同的数据速率。因此,虽然OFDM将串行信号转换为并行信号&#…

HTTP基本概念

HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。 HTTP 默认工作在 TCP…

【数据库原理】(23)实际应用中的查询优化方法

一.基于索引的优化 索引是数据库查询优化的关键工具之一。合理地使用索引可以显著提高查询速度,降低全表扫描的成本。以下是建立和使用索引的一些基本原则和最佳实践。 索引的建立与使用原则 数据量规模与查询频率: 值得建立索引的表通常具有较多的记录&#xff0…

linux防火墙查看状态firewall、iptable

1、iptables防火墙 查看防火墙状态 service iptables status 停止防火墙 service iptables stop 启动防火墙 service iptables start 重启防火墙 service iptables restart 永久关闭防火墙 chkconfig iptables off 永久关闭后重启 chkconfig iptables on 开启80端…

【天龙怀旧服】攻略day5

关键字: 天鉴扫荡、举贤、燕子水路 1】85天鉴任务可以扫荡 在流派选择npc那里,花费40交子即可扫荡100点,可以兑换10个灵武打造图; 此外打造图绑定不影响做出来的灵武绑定,只要对应的玉不绑灵武就不绑定 2】冠绝师门…

报错java.lang.IllegalArgumentException: MALFORMED

java.lang.IllegalArgumentException: MALFORMEDat java.util.zip.ZipCoder.toString(ZipCoder.java:58)at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:300)at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:122)我是在解压压缩包文件的时候…

想要简化重复订单吗?不妨考虑一揽子采购订单

企业想提高采购流程效率,简化大批量采购是一个很好的开始。财务、会计和采购部门通过系统化订购大量物品(如纸张、打印机墨水和墨粉、清洁用品、纸制品和其他易重复采购的消耗品)可以节省时间和金钱。借助正确的采购订单(PO&#…

android 重启

RescueParty 重启 Android之RescueParty机制 - 简书 01-10 16:39:15.421637 1268 1395 W RescueParty: Attempting rescue level RESET_SETTINGS_UNTRUSTED_DEFAULTS Line 90467: 01-10 16:39:15.422713 1268 1395 W RescueParty: Performing scoped reset for pack…

小程序基础学习(组件通信)

介绍 点击子组件的按钮,把点击事件发送给页面 例如:点击这个“最大的一头猪”,由组件内部设置点击事件然后在传递给页面。 实现原理 给组件内部需要点击的文本设置点击事件 在组件内部监听点击事件,并发送给页面点击事件的详细信…

一天一个设计模式---桥接模式

概念 桥接器模式是一种结构型设计模式,旨在将抽象部分与实现部分分离,使它们可以独立变化而不相互影响。桥接器模式通过创建一个桥接接口,连接抽象和实现,从而使两者可以独立演化。 具体内容 桥接器模式通常包括以下几个要素&a…

操作符之可选链和空值合并

可选链操作符 ?. 是 JavaScript 的 ECMAScript 2020 (ES11) 中引入的一项新特性。它的作用是在处理可能为 null 或 undefined 的对象属性或方法时,防止因为访问链中的某个属性或方法为 null 或 undefined 而导致的错误。可选链操作符的语法是 ?.。 让我们来看一个…

node运行 js报错 SyntaxError: Cannot use import statement outside a module

使用babel相关模块来进行转义支持,通过使用babel编译,使其转化为node.js的模块。 1、安装依赖 npm install --save babel-corenpm install --save babel-preset-env npm install babel-cli -g2、在根目录下创建 .babelrc文件。内容为: {&qu…

C# 学习笔记-001-继承

1,继承类型 继承的类型:实现继承和接口继承 实现继承: 表示一个类型派生于一个基类型,拥有改类型的所有成员字段和函数。 接口继承: 表示一个类型只继承了函数函数签名,没有继承任何实现代码。 2&#xff…

电调相关英文缩写ESC、BEC、PPM、Oneshot125、Oneshot42、Multishot、DShot、ProShot

ESC ESC全称是 Electronic Speed Control 中文翻译成电子调速器,就是电调 BEC BEC全称是 battey elimination circuit 中文翻译成免电池电路 可以理解就是对外供电,BEC就是线性稳压,降压用的,给接收机飞控供电 ESC协议 ESC协议…

Android14之解决Pixel手机联网出现感叹号(一百八十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

图解JVM (及一些垃圾回收\GC相关面试题 持续更新)

垃圾回收,顾名思义就是释放垃圾占用的空间,从而提升程序性能,防止内存泄露。当一个对象不再被需要时,该对象就需要被回收并释放空间。 Java 内存运行时数据区域包括程序计数器、虚拟机栈、本地方法栈、堆等区域。其中,…