当前位置: 首页 > news >正文

新手能掌握 PyTorch 的填充技术:深入理解反射、复制、零值和常数填充

目录

torch.nn子模块详解

nn.ReflectionPad1d

参数说明:

形状(Shape):

使用示例:

注意事项:

nn.ReflectionPad2d

参数说明:

形状(Shape):

使用示例:

注意事项:

nn.ReflectionPad3d

参数说明:

形状(Shape):

使用示例:

注意事项:

nn.ReplicationPad1d

参数说明:

形状(Shape):

使用示例:

注意事项:

nn.ReplicationPad2d

参数说明:

形状(Shape):

使用示例:

注意事项:

nn.ReplicationPad3d

参数说明:

形状(Shape):

使用示例:

注意事项:

nn.ZeroPad1d 

参数说明:

形状(Shape):

使用示例:

注意事项:

nn.ZeroPad2d

参数说明:

形状(Shape):

使用示例:

注意事项:

nn.ZeroPad3d

参数说明:

形状(Shape):

使用示例:

注意事项:

nn.ConstantPad1d

参数说明:

形状(Shape):

使用示例:

注意事项:

nn.ConstantPad2d

参数说明:

形状(Shape):

使用示例:

注意事项:

nn.ConstantPad3d

参数说明:

形状(Shape):

使用示例:

注意事项:

总结


torch.nn子模块详解

nn.ReflectionPad1d

torch.nn.ReflectionPad1d 是 PyTorch 深度学习框架中的一个类,用于对输入的张量(tensor)进行边界反射填充。这意味着它会复制输入张量的边界值来增加其大小。这种填充方式常用于卷积神经网络中,以保持数据的空间维度。

参数说明:

  • padding:这个参数可以是一个整数或一个二元组(tuple)。如果是整数,它会在所有边界上应用相同的填充大小。如果是二元组,它表示左右两边的填充大小,格式为 (padding_left, padding_right)

形状(Shape):

  • 输入:其形状可以是 (C, W)(N, C, W),其中 C 是通道数,W 是输入宽度,N 是批大小(如果有的话)。
  • 输出:形状为 (C, W_out)(N, C, W_out),其中 W_out = W_in + padding_left + padding_right。这里,W_out 是填充后的宽度。

使用示例:

1. 基本使用:如果你使用 nn.ReflectionPad1d(2),这意味着在输入张量的每一边添加两个单位的反射填充。

m = nn.ReflectionPad1d(2)
input = torch.arange(8, dtype=torch.float).reshape(1, 2, 4)
output = m(input)

这将在输入张量的左右两侧分别添加两个单位的反射填充。

2. 使用不同的填充大小:你可以通过传递一个二元组来为左右两边设置不同的填充大小,比如 nn.ReflectionPad1d((3, 1))

m = nn.ReflectionPad1d((3, 1))
output = m(input)

这将在输入张量的左边添加三个单位,右边添加一个单位的反射填充。

注意事项:

  • 数据类型:确保输入数据的类型(如 float32)与你的模型其他部分一致。
  • 边界效应:由于反射填充是通过复制边缘值实现的,因此在某些情况下可能会引入不希望的边界效应。
  • 使用场景:反射填充在视觉任务中特别有用,因为它可以保持图像边缘的连续性,而不是简单地填充零或其他值。

在数学公式中,W_out = W_in + padding_left + padding_right 描述了输出宽度(W_out)是如何根据输入宽度(W_in)以及左右两侧的填充大小计算出来的。

nn.ReflectionPad2d

 

torch.nn.ReflectionPad2d 是 PyTorch 框架中用于二维数据的一个填充类,它使用输入边界的反射进行填充。这种类型的填充在处理图像或其他二维数据时非常有用,尤其是在进行卷积操作时,需要保持数据尺寸不变的情况下。

参数说明:

  • padding:这个参数可以是一个整数或一个四元组(4-tuple)。如果是整数,它会在所有边界上应用相同的填充大小。如果是四元组,它表示四个边界的填充大小,格式为 (padding_left, padding_right, padding_top, padding_bottom)

形状(Shape):

  • 输入:其形状可以是 (N, C, H_in, W_in)(C, H_in, W_in),其中 N 是批大小,C 是通道数,H_in 是输入高度,W_in 是输入宽度。
  • 输出:形状为 (N, C, H_out, W_out)(C, H_out, W_out),其中 H_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right。这里的 H_outW_out 分别是填充后的高度和宽度。

使用示例:

  1. 基本使用:如果使用 nn.ReflectionPad2d(2),这意味着在所有四个边界上添加两个单位的反射填充。

m = nn.ReflectionPad2d(2)
input = torch.arange(9, dtype=torch.float).reshape(1, 1, 3, 3)
output = m(input)

 这将在输入张量的每一边添加两个单位的反射填充。

    2. 使用不同的填充大小:你可以传递一个四元组来为每个边界设置不同的填充大小,比如 nn.ReflectionPad2d((1, 1, 2, 0))

m = nn.ReflectionPad2d((1, 1, 2, 0))
output = m(input)

这将在输入张量的左、右边各添加一个单位,顶部添加两个单位,底部不添加填充的反射填充。

注意事项:

  • 数据类型:确保输入数据的类型与模型其他部分一致。
  • 边界效应:反射填充通过复制边缘值,可能在某些情况下引入边界效应,需要注意这一点。
  • 适用场景:反射填充尤其适用于视觉任务,因为它在填充时保持了图像边缘的连续性。

在数学公式中,H_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right 描述了输出的高度(H_out)和宽度(W_out)是如何基于输入的高度(H_in)、宽度(W_in)以及各边的填充大小计算出来的。

nn.ReflectionPad3d

torch.nn.ReflectionPad3d 是 PyTorch 深度学习框架中的一个类,专门用于对三维数据进行反射填充。这种填充方式在处理三维数据(如体积数据或视频帧)时非常有用,尤其是在卷积神经网络中需要保持数据尺寸不变的场景中。

参数说明:

  • padding:这个参数可以是一个整数或一个六元组(6-tuple)。如果是整数,它会在所有边界上应用相同的填充大小。如果是六元组,它表示六个边界的填充大小,格式为 (padding_left, padding_right, padding_top, padding_bottom, padding_front, padding_back)

形状(Shape):

  • 输入:其形状可以是 (N, C, D_in, H_in, W_in)(C, D_in, H_in, W_in),其中 N 是批大小,C 是通道数,D_in 是输入深度,H_in 是输入高度,W_in 是输入宽度。
  • 输出:形状为 (N, C, D_out, H_out, W_out)(C, D_out, H_out, W_out),其中 D_out = D_in + padding_front + padding_backH_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right。这里的 D_outH_outW_out 分别是填充后的深度、高度和宽度。

使用示例:

 基本使用:如果使用 nn.ReflectionPad3d(1),这意味着在所有六个边界上添加一个单位的反射填充。

m = nn.ReflectionPad3d(1)
input = torch.arange(8, dtype=torch.float).reshape(1, 1, 2, 2, 2)
output = m(input)

这将在输入张量的每一个边界添加一个单位的反射填充。

 使用不同的填充大小:你可以传递一个六元组来为每个边界设置不同的填充大小。

# 示例:设置不同的填充大小
m = nn.ReflectionPad3d((1, 1, 2, 0, 1, 2))
# 然后使用 m(input) 来应用填充

 这将在输入张量的不同边界上添加不同大小的反射填充。

注意事项:

  • 数据类型:确保输入数据的类型与模型其他部分一致。
  • 边界效应:反射填充通过复制边缘值,可能在某些情况下引入边界效应,需要特别注意。
  • 适用场景:反射填充尤其适用于处理三维数据,如医学图像、视频处理等领域。

在数学公式中,D_out = D_in + padding_front + padding_backH_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right 描述了输出的深度(D_out)、高度(H_out)和宽度(W_out)是如何基于输入的深度(D_in)、高度(H_in)、宽度(W_in)以及各边的填充大小计算出来的。

nn.ReplicationPad1d

torch.nn.ReplicationPad1d 是 PyTorch 框架中用于一维数据的填充类,它通过复制输入边界的值来进行填充。这种填充方式在处理一维序列数据(如时间序列、音频信号等)时非常有用,尤其是在进行卷积操作时需要保持数据长度不变的情况下。

参数说明:

  • padding:这个参数可以是一个整数或一个二元组(tuple)。如果是整数,它会在所有边界上应用相同的填充大小。如果是二元组,它表示左右两边的填充大小,格式为 (padding_left, padding_right)

形状(Shape):

  • 输入:其形状可以是 (C, W_in)(N, C, W_in),其中 C 是通道数,W_in 是输入宽度,N 是批大小(如果有的话)。
  • 输出:形状为 (C, W_out)(N, C, W_out),其中 W_out = W_in + padding_left + padding_right。这里的 W_out 是填充后的宽度。

使用示例:

  1. 基本使用:如果使用 nn.ReplicationPad1d(2),这意味着在输入张量的每一边添加两个单位的复制填充。

m = nn.ReplicationPad1d(2)
input = torch.arange(8, dtype=torch.float).reshape(1, 2, 4)
output = m(input)

 这将在输入张量的左右两侧分别添加两个单位的复制填充。

   2. 使用不同的填充大小:你可以通过传递一个二元组来为左右两边设置不同的填充大小,比如 nn.ReplicationPad1d((3, 1))

m = nn.ReplicationPad1d((3, 1))
output = m(input)

这将在输入张量的左边添加三个单位,右边添加一个单位的复制填充。

注意事项:

  • 数据类型:确保输入数据的类型(如 float32)与你的模型其他部分一致。
  • 填充效果:由于复制填充是通过重复边缘值实现的,因此在某些情况下可能会引入不希望的效果,特别是在边缘值与邻近数据差异较大时。
  • 使用场景:复制填充在处理一维数据时特别有用,因为它在填充时尽可能保持了数据的局部特性。

在数学公式中,W_out = W_in + padding_left + padding_right 描述了输出宽度(W_out)是如何根据输入宽度(W_in)以及左右两侧的填充大小计算出来的。

nn.ReplicationPad2d

torch.nn.ReplicationPad2d 是 PyTorch 框架中用于二维数据的填充类,它通过复制输入边界的值来进行填充。这种填充方式在处理图像或其他二维数据时非常有用,尤其是在进行卷积操作时需要保持数据尺寸不变的情况下。

参数说明:

  • padding:这个参数可以是一个整数或一个四元组(4-tuple)。如果是整数,它会在所有边界上应用相同的填充大小。如果是四元组,它表示四个边界的填充大小,格式为 (padding_left, padding_right, padding_top, padding_bottom)

形状(Shape):

  • 输入:其形状可以是 (N, C, H_in, W_in)(C, H_in, W_in),其中 N 是批大小,C 是通道数,H_in 是输入高度,W_in 是输入宽度。
  • 输出:形状为 (N, C, H_out, W_out)(C, H_out, W_out),其中 H_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right。这里的 H_outW_out 分别是填充后的高度和宽度。

使用示例:

以下是一个整合的示例,展示了如何使用 nn.ReplicationPad2d,包括使用相同的填充大小和不同的填充大小两种情况:

import torch
import torch.nn as nn# 使用相同的填充大小
m_same_padding = nn.ReplicationPad2d(2)
input = torch.arange(9, dtype=torch.float).reshape(1, 1, 3, 3)
output_same_padding = m_same_padding(input)# 使用不同的填充大小
m_different_padding = nn.ReplicationPad2d((1, 1, 2, 0))
output_different_padding = m_different_padding(input)# 打印输出
print("Output with same padding on all sides:\n", output_same_padding)
print("\nOutput with different padding:\n", output_different_padding)

注意事项:

  • 数据类型:确保输入数据的类型(如 float32)与你的模型其他部分一致。
  • 填充效果:由于复制填充是通过重复边缘值实现的,因此在某些情况下可能会引入不希望的效果,特别是在边缘值与邻近数据差异较大时。
  • 使用场景:复制填充在处理二维数据时特别有用,因为它在填充时尽可能保持了数据的局部特性。

在数学公式中,H_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right 描述了输出的高度(H_out)和宽度(W_out)是如何基于输入的高度(H_in)、宽度(W_in)以及各边的填充大小计算出来的。

nn.ReplicationPad3d

torch.nn.ReplicationPad3d 是 PyTorch 框架中用于三维数据的填充类,它通过复制输入边界的值来进行填充。这种填充方式在处理三维数据(如体积数据、三维图像)时非常有用,尤其是在进行卷积操作时需要保持数据尺寸不变的情况下。

参数说明:

  • padding:这个参数可以是一个整数或一个六元组(6-tuple)。如果是整数,它会在所有边界上应用相同的填充大小。如果是六元组,它表示六个边界的填充大小,格式为 (padding_left, padding_right, padding_top, padding_bottom, padding_front, padding_back)

形状(Shape):

  • 输入:其形状可以是 (N, C, D_in, H_in, W_in)(C, D_in, H_in, W_in),其中 N 是批大小,C 是通道数,D_in 是输入深度,H_in 是输入高度,W_in 是输入宽度。
  • 输出:形状为 (N, C, D_out, H_out, W_out)(C, D_out, H_out, W_out),其中 D_out = D_in + padding_front + padding_backH_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right。这里的 D_outH_outW_out 分别是填充后的深度、高度和宽度。

使用示例:

以下是一个整合的示例,展示了如何使用 nn.ReplicationPad3d,包括使用相同的填充大小和不同的填充大小两种情况:

import torch
import torch.nn as nn# 使用相同的填充大小
m_same_padding = nn.ReplicationPad3d(3)
input = torch.randn(16, 3, 8, 320, 480)
output_same_padding = m_same_padding(input)# 使用不同的填充大小
m_different_padding = nn.ReplicationPad3d((3, 3, 6, 6, 1, 1))
output_different_padding = m_different_padding(input)# 打印输出
print("Output with same padding on all sides:\n", output_same_padding.shape)
print("\nOutput with different padding:\n", output_different_padding.shape)

注意事项:

  • 数据类型:确保输入数据的类型(如 float32)与你的模型其他部分一致。
  • 填充效果:由于复制填充是通过重复边缘值实现的,因此在某些情况下可能会引入不希望的效果,特别是在边缘值与邻近数据差异较大时。
  • 使用场景:复制填充在处理三维数据时特别有用,因为它在填充时尽可能保持了数据的局部特性。

在数学公式中,D_out = D_in + padding_front + padding_backH_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right 描述了输出的深度(D_out)、高度(H_out)和宽度(W_out)是如何基于输入的深度(D_in)、高度(H_in)、宽度(W_in)以及各边的填充大小计算出来的。

nn.ZeroPad1d 

torch.nn.ZeroPad1d 是 PyTorch 框架中用于一维数据的填充类,它通过在输入张量的边界添加零来进行填充。这种填充方式在处理一维序列数据(如时间序列、音频信号等)时非常有用,尤其是在进行卷积操作时需要保持数据长度不变的情况下。

参数说明:

  • padding:这个参数可以是一个整数或一个二元组(tuple)。如果是整数,它会在两边边界上应用相同的填充大小。如果是二元组,它表示左右两边的填充大小,格式为 (padding_left, padding_right)

形状(Shape):

  • 输入:其形状可以是 (C, W_in)(N, C, W_in),其中 C 是通道数,W_in 是输入宽度,N 是批大小(如果有的话)。
  • 输出:形状为 (C, W_out)(N, C, W_out),其中 W_out = W_in + padding_left + padding_right。这里的 W_out 是填充后的宽度。

使用示例:

以下是一个整合的示例,展示了如何使用 nn.ZeroPad1d,包括使用相同的填充大小和不同的填充大小两种情况:

import torch
import torch.nn as nn# 使用相同的填充大小
m_same_padding = nn.ZeroPad1d(2)
input1 = torch.randn(1, 2, 4)
output1 = m_same_padding(input1)# 使用不同的填充大小
m_different_padding = nn.ZeroPad1d((3, 1))
input2 = torch.randn(1, 2, 3)
output2 = m_different_padding(input2)# 打印输出
print("Output with same padding on both sides:\n", output1)
print("\nOutput with different padding:\n", output2)

注意事项:

  • 数据类型:确保输入数据的类型(如 float32)与你的模型其他部分一致。
  • 填充效果:零填充会在序列的边界添加零值,这可能会对模型产生特定的影响,尤其是在模型需要解释边界信息时。
  • 使用场景:零填充在处理一维数据时特别有用,尤其是在需要保持数据长度不变时。

在数学公式中,W_out = W_in + padding_left + padding_right 描述了输出宽度(W_out)是如何根据输入宽度(W_in)以及左右两侧的填充大小计算出来的。

nn.ZeroPad2d

torch.nn.ZeroPad2d 是 PyTorch 框架中用于二维数据的填充类,它通过在输入张量的边界添加零来进行填充。这种填充方式在处理图像或其他二维数据时非常有用,尤其是在进行卷积操作时需要保持数据尺寸不变的情况下。

参数说明:

  • padding:这个参数可以是一个整数或一个四元组(4-tuple)。如果是整数,它会在所有边界上应用相同的填充大小。如果是四元组,它表示四个边界的填充大小,格式为 (padding_left, padding_right, padding_top, padding_bottom)

形状(Shape):

  • 输入:其形状可以是 (N, C, H_in, W_in)(C, H_in, W_in),其中 N 是批大小,C 是通道数,H_in 是输入高度,W_in 是输入宽度。
  • 输出:形状为 (N, C, H_out, W_out)(C, H_out, W_out),其中 H_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right。这里的 H_outW_out 分别是填充后的高度和宽度。

使用示例:

以下是一个整合的示例,展示了如何使用 nn.ZeroPad2d,包括使用相同的填充大小和不同的填充大小两种情况:

import torch
import torch.nn as nn# 使用相同的填充大小
m_same_padding = nn.ZeroPad2d(2)
input1 = torch.randn(1, 1, 3, 3)
output1 = m_same_padding(input1)# 使用不同的填充大小
m_different_padding = nn.ZeroPad2d((1, 1, 2, 0))
input2 = torch.randn(1, 1, 3, 3)
output2 = m_different_padding(input2)# 打印输出
print("Output with same padding on all sides:\n", output1)
print("\nOutput with different padding:\n", output2)

注意事项:

  • 数据类型:确保输入数据的类型(如 float32)与你的模型其他部分一致。
  • 填充效果:零填充会在图像的边界添加零值,这可能会对模型产生特定的影响,尤其是在模型需要解释边界信息时。
  • 使用场景:零填充在处理二维数据时特别有用,尤其是在需要保持数据尺寸不变时。

在数学公式中,H_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right 描述了输出的高度(H_out)和宽度(W_out)是如何基于输入的高度(H_in)、宽度(W_in)以及各边的填充大小计算出来的。

nn.ZeroPad3d

torch.nn.ZeroPad3d 是 PyTorch 框架中用于三维数据的填充类,它通过在输入张量的边界添加零来进行填充。这种填充方式在处理三维数据(如体积数据、三维图像等)时非常有用,尤其是在进行卷积操作时需要保持数据尺寸不变的情况下。

参数说明:

  • padding:这个参数可以是一个整数或一个六元组(6-tuple)。如果是整数,它会在所有边界上应用相同的填充大小。如果是六元组,它表示六个边界的填充大小,格式为 (padding_left, padding_right, padding_top, padding_bottom, padding_front, padding_back)

形状(Shape):

  • 输入:其形状可以是 (N, C, D_in, H_in, W_in)(C, D_in, H_in, W_in),其中 N 是批大小,C 是通道数,D_in 是输入深度,H_in 是输入高度,W_in 是输入宽度。
  • 输出:形状为 (N, C, D_out, H_out, W_out)(C, D_out, H_out, W_out),其中 D_out = D_in + padding_front + padding_backH_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right。这里的 D_outH_outW_out 分别是填充后的深度、高度和宽度。

使用示例:

以下是一个整合的示例,展示了如何使用 nn.ZeroPad3d,包括使用相同的填充大小和不同的填充大小两种情况:

import torch
import torch.nn as nn# 使用相同的填充大小
m_same_padding = nn.ZeroPad3d(3)
input1 = torch.randn(16, 3, 10, 20, 30)
output1 = m_same_padding(input1)# 使用不同的填充大小
m_different_padding = nn.ZeroPad3d((3, 3, 6, 6, 0, 1))
output2 = m_different_padding(input1)# 打印输出
print("Output with same padding on all sides:\n", output1.shape)
print("\nOutput with different padding:\n", output2.shape)

注意事项:

  • 数据类型:确保输入数据的类型(如 float32)与你的模型其他部分一致。
  • 填充效果:零填充会在三维数据的边界添加零值,这可能会对模型产生特定的影响,尤其是在模型需要解释边界信息时。
  • 使用场景:零填充在处理三维数据时特别有用,尤其是在需要保持数据尺寸不变时。

在数学公式中,D_out = D_in + padding_front + padding_backH_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right 描述了输出的深度(D_out)、高度(H_out)和宽度(W_out)是如何基于输入的深度(D_in)、高度(H_in)、宽度(W_in)以及各边的填充大小计算出来的。

nn.ConstantPad1d

torch.nn.ConstantPad1d 是 PyTorch 框架中用于一维数据的填充类,它通过在输入张量的边界添加一个常数值来进行填充。这种填充方式在处理一维序列数据(如时间序列、音频信号等)时非常有用,尤其是在进行卷积操作时需要保持数据长度不变的情况下。

参数说明:

  • padding:这个参数可以是一个整数或一个二元组(tuple)。如果是整数,它会在两边边界上应用相同的填充大小。如果是二元组,它表示左右两边的填充大小,格式为 (padding_left, padding_right)
  • value:填充的常数值。

形状(Shape):

  • 输入:其形状可以是 (C, W_in)(N, C, W_in),其中 C 是通道数,W_in 是输入宽度,N 是批大小(如果有的话)。
  • 输出:形状为 (C, W_out)(N, C, W_out),其中 W_out = W_in + padding_left + padding_right。这里的 W_out 是填充后的宽度。

使用示例:

以下是一个整合的示例,展示了如何使用 nn.ConstantPad1d,包括使用相同的填充大小和不同的填充大小两种情况:

import torch
import torch.nn as nn# 使用相同的填充大小
m_same_padding = nn.ConstantPad1d(2, 3.5)
input1 = torch.randn(1, 2, 4)
output1 = m_same_padding(input1)# 使用不同的填充大小
m_different_padding = nn.ConstantPad1d((3, 1), 3.5)
input2 = torch.randn(1, 2, 3)
output2 = m_different_padding(input2)# 打印输出
print("Output with same padding on both sides:\n", output1)
print("\nOutput with different padding:\

注意事项:

  • 数据类型:确保输入数据的类型(如 float32)与你的模型其他部分一致。
  • 填充效果:常数填充会在序列的边界添加特定的常数值,这可能会对模型产生特定的影响,尤其是在模型需要解释边界信息时。
  • 使用场景:常数填充在处理一维数据时特别有用,尤其是在需要保持数据长度不变时。

在数学公式中,W_out = W_in + padding_left + padding_right 描述了输出宽度(W_out)是如何根据输入宽度(W_in)以及左右两侧的填充大小和填充值计算出来的。

nn.ConstantPad2d

torch.nn.ConstantPad2d 是 PyTorch 框架中用于二维数据的填充类,它通过在输入张量的边界添加一个常数值来进行填充。这种填充方式在处理图像或其他二维数据时非常有用,尤其是在进行卷积操作时需要保持数据尺寸不变的情况下。

参数说明:

  • padding:这个参数可以是一个整数或一个四元组(4-tuple)。如果是整数,它会在所有边界上应用相同的填充大小。如果是四元组,它表示四个边界的填充大小,格式为 (padding_left, padding_right, padding_top, padding_bottom)
  • value:填充的常数值。

形状(Shape):

  • 输入:其形状可以是 (N, C, H_in, W_in)(C, H_in, W_in),其中 N 是批大小,C 是通道数,H_in 是输入高度,W_in 是输入宽度。
  • 输出:形状为 (N, C, H_out, W_out)(C, H_out, W_out),其中 H_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right。这里的 H_outW_out 分别是填充后的高度和宽度。

使用示例:

以下是一个整合的示例,展示了如何使用 nn.ConstantPad2d,包括使用相同的填充大小和不同的填充大小两种情况:

import torch
import torch.nn as nn# 使用相同的填充大小
m_same_padding = nn.ConstantPad2d(2, 3.5)
input1 = torch.randn(1, 2, 2)
output1 = m_same_padding(input1)# 使用不同的填充大小
m_different_padding = nn.ConstantPad2d((3, 0, 2, 1), 3.5)
output2 = m_different_padding(input1)# 打印输出
print("Output with same padding on all sides:\n", output1)
print("\nOutput with different padding:\n", output2)

注意事项:

  • 数据类型:确保输入数据的类型(如 float32)与你的模型其他部分一致。
  • 填充效果:常数填充会在图像的边界添加特定的常数值,这可能会对模型产生特定的影响,尤其是在模型需要解释边界信息时。
  • 使用场景:常数填充在处理二维数据时特别有用,尤其是在需要保持数据尺寸不变时。

在数学公式中,H_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right 描述了输出的高度(H_out)和宽度(W_out)是如何基于输入的高度(H_in)、宽度(W_in)以及各边的填充大小和填充值计算出来的。

nn.ConstantPad3d

torch.nn.ConstantPad3d 是 PyTorch 框架中用于三维数据的填充类,它通过在输入张量的边界添加一个常数值来进行填充。这种填充方式在处理三维数据(如体积数据、三维图像等)时非常有用,尤其是在进行卷积操作时需要保持数据尺寸不变的情况下。

参数说明:

  • padding:这个参数可以是一个整数或一个六元组(6-tuple)。如果是整数,它会在所有边界上应用相同的填充大小。如果是六元组,它表示六个边界的填充大小,格式为 (padding_left, padding_right, padding_top, padding_bottom, padding_front, padding_back)
  • value:填充的常数值。

形状(Shape):

  • 输入:其形状可以是 (N, C, D_in, H_in, W_in)(C, D_in, H_in, W_in),其中 N 是批大小,C 是通道数,D_in 是输入深度,H_in 是输入高度,W_in 是输入宽度。
  • 输出:形状为 (N, C, D_out, H_out, W_out)(C, D_out, H_out, W_out),其中 D_out = D_in + padding_front + padding_backH_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right。这里的 D_outH_outW_out 分别是填充后的深度、高度和宽度。

使用示例:

以下是一个整合的示例,展示了如何使用 nn.ConstantPad3d,包括使用相同的填充大小和不同的填充大小两种情况:

import torch
import torch.nn as nn# 使用相同的填充大小
m_same_padding = nn.ConstantPad3d(3, 3.5)
input1 = torch.randn(16, 3, 10, 20, 30)
output1 = m_same_padding(input1)# 使用不同的填充大小
m_different_padding = nn.ConstantPad3d((3, 3, 6, 6, 0, 1), 3.5)
output2 = m_different_padding(input1)# 打印输出
print("Output with same padding on all sides:\n", output1.shape)
print("\nOutput with different padding:\n", output2.shape)

注意事项:

  • 数据类型:确保输入数据的类型(如 float32)与你的模型其他部分一致。
  • 填充效果:常数填充会在三维数据的边界添加特定的常数值,这可能会对模型产生特定的影响,尤其是在模型需要解释边界信息时。
  • 使用场景:常数填充在处理三维数据时特别有用,尤其是在需要保持数据尺寸不变时。

在数学公式中,D_out = D_in + padding_front + padding_backH_out = H_in + padding_top + padding_bottomW_out = W_in + padding_left + padding_right 描述了输出的深度(D_out)、高度(H_out)和宽度(W_out)是如何基于输入的深度(D_in)、高度(H_in)、宽度(W_in)以及各边的填充大小和填充值计算出来的。

总结

         本文详细介绍了 PyTorch 框架中的多个填充类,用于在深度学习模型中处理不同维度的数据。这些填充方法对于保持卷积神经网络中数据的空间维度至关重要,尤其在图像处理、音频信号处理等领域中有广泛应用。每种填充方法都有其特定的应用场景和注意事项,如数据类型一致性、边界效应的考虑等。文章通过具体的代码示例展示了如何在 PyTorch 中使用这些填充类,并解释了它们的工作原理。

相关文章:

新手能掌握 PyTorch 的填充技术:深入理解反射、复制、零值和常数填充

目录 torch.nn子模块详解 nn.ReflectionPad1d 参数说明: 形状(Shape): 使用示例: 注意事项: nn.ReflectionPad2d 参数说明: 形状(Shape): 使用示例…...

地震烈度速报与预警工程成功案例的经验分享 | TDengine 技术培训班第一期成功落地

近日,涛思数据在成都开设了“国家地震烈度速报与预警工程数据库 TDengine、消息中间件 TMQ 技术培训班”,这次培训活动共分为三期,而本次活动是第一期。其目标是帮助参与者深入了解 TDengine 和 TMQ 的技术特点和应用场景,并学习如…...

集群部署篇--Redis 集群动态伸缩

文章目录 前言一、redis 节点的添加1.1 redis 的实例部署:1.2 redis 节点添加:1.3 槽位分配:1.4 添加从节点: 二、redis 节点的减少2.1 移除主节点2.1.1 迁移槽位2.1.1 删除节点: 三、redis 删除节点的重新加入3.1 加入…...

excel中解决多行文本自动调整行高后打印预览还是显示不全情况

注意:此方法对于多行合并后单元格行高调整不适用,需要手动调整,如大家有简便方法,欢迎评论。 一、调整表格为自动调整行高 1)点击此处全选表格 2)在第一行序号单元格的下端,鼠标成黑十字时&am…...

策略模式+责任链模式配合Nacos实现参数校验链

1、业务场景 在SpringBoot项目中,针对接收的参数信息,根据需求要进行以下校验: 校验客户的apikey是否合法;校验请求的ip地址是否是白名单;校验短信的签名;校验短信的模板;校验手机号的格式合法…...

‘react-native‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

原因:没有下载react-native 解决下载react-native npm i -g react-native-cli...

c语言:求最小公倍数|练习题

一、题目 输入两个数,求两数的最小公倍数。 如图: 二、思路分析 1、先知道两个数里的最小值(比如:9和6,取6) 2、用2到6,5个数,同时除以9和6,得最小公约数:3 3、用9除33,6除32。得最小…...

嵌入式系统(二)单片机基础 | 单片机特点 内部结构 最小系统 电源 晶振 复位

上一篇文章我们介绍了嵌入式系统 嵌入式系统(Embedded System)是一种特定用途的计算机系统,它通常嵌入在更大的产品或系统中,用于控制、监测或执行特定的任务。这些系统通常由硬件和软件组成,旨在满足特定的需求&…...

NLP基础——中文分词

简介 分词是自然语言处理(NLP)中的一个基本任务,它涉及将连续的文本序列切分成多个有意义的单元,这些单元通常被称为“词”或“tokens”。在英语等使用空格作为自然分隔符的语言中,分词相对简单,因为大部分…...

阿里云服务器Alibaba Cloud Linux 3镜像版本大全说明

Alibaba Cloud Linux阿里云打造的Linux服务器操作系统发行版,Alibaba Cloud Linux完全兼容完全兼容CentOS/RHEL生态和操作方式,目前已经推出Alibaba Cloud Linux 3,阿里云百科aliyunbaike.com分享Alibaba Cloud Linux 3版本特性说明&#xff…...

WebGIS开发的常见框架及优缺点

WebGIS开发引擎的发展历程: 内容来自公众号:Spatial Data 地图API分类 WebGIS系统通常都围绕地图进行内容表达,但并不是有地图就一定是WebGIS,所以下面要讨论下基于Web的地图API分类及应用场景。Web上的Map API主要分类&#xff…...

ansible 配置jspgou商城上线(MySQL版)

准备环境 准备两台纯净的服务器进行,在实验之前我们关闭防火墙和selinux systemctl stop firewalld #关闭防火墙 setenforce 0 #临时关闭selinux hosts解析(两台服务器都要去做) [rootansible-server ~]# vim /etc/hosts 10.31.162.24 ansible-ser…...

算法导论复习——CHP22 分支限界法

LIFO和FIFO分枝-限界法 采用宽度优先策略,在生成当前E-结点全部儿子之后再生成其它活结点的儿子,且用限界函数帮助避免生成不包含答案结点子树的状态空间的检索方法。两种基本设计策略: FIFO检索:活结点表采用队列&#x…...

鸿蒙系列--装饰器

一、基础UI组件结构 每个UI组件需要定义为Component struct对象,其内部必须包含一个且只能包含一个build(){}函数,用于绘制UI;struct之内、build()函数之外的地方用于存放数据。 二、基本UI装饰器 Entry 装饰struct,页面的入口…...

FairGuard游戏加固产品常见问题解答

针对日常对接中,各位用户对FairGuard游戏加固方案在安全性、稳定性、易用性、接入流程等方面的关注,我们梳理了相关问题与解答,希望可以让您对产品有一个初步的认知与认可。 Q1:FairGuard游戏加固产品都有哪些功能? A:FairGuar…...

Redis(二)数据类型

文章目录 官网备注十大数据类型StringListHashSetZSetBitmapHyperLogLog:GEOStreamBitfield 官网 英文:https://redis.io/commands/ 中文:http://www.redis.cn/commands.html 备注 命令不区分大小写,key区分大小写帮助命令help…...

2023年广东省网络安全B模块(笔记详解)

模块B 网络安全事件响应、数字取证调查和应用安全 一、项目和任务描述: 假定你是某网络安全技术支持团队成员,某企业的服务器系统被黑客攻击,你的团队前来帮助企业进行调查并追踪本次网络攻击的源头,分析黑客的攻击方式,发现系统漏洞,提交网络安全事件响应报告,修复系统…...

每日力扣算法题(简单篇)

543.二叉树的直径 原题: 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 解题思路: …...

Flume基础知识(三):Flume 实战监控端口数据官方案例

1. 监控端口数据官方案例 1)案例需求: 使用 Flume 监听一个端口,收集该端口数据,并打印到控制台。 2)需求分析: 3)实现步骤: (1)安装 netcat 工具 sudo yum …...

通过IP地址如何进行网络安全防护

IP地址在网络安全防护中起着至关重要的作用,可以用于监控、过滤和控制网络流量,识别潜在威胁并加强网络安全。以下是通过IP地址进行网络安全防护的一些建议: 1. 建立IP地址白名单和黑名单: 白名单:确保只有授权的IP地…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...