当前位置: 首页 > 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.js 中使用 Watch 选项实现动态问题判断与展示答案

组件结构 以下是组件的基本结构&#xff1a; <template><div><!-- 输入框&#xff0c;用于输入问题 --><p>提出一个是/否问题&#xff1a;<input v-model"question" :disabled"loading" /></p><!-- 显示答案 --&…...

python笔记-自用

2024/1/3# python用号实现字符串的拼接&#xff0c;非字符串不能拼接 from pymysql import Connection# 连接mysql数据库salary 100 name "wang"ans "%s" % salary name print(ans)x 1 y 2 sum "%s %s" % (x, y) print(sum)# %s字符串占…...

安克创新与火山引擎数智平台开展合作:数据分析降门槛 数据协同破边界

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;消费电子品牌安克创新与火山引擎数智平台&#xff08;VeDI&#xff09;达成合作&#xff0c;双方将聚焦安克创新大数据平台的海量数据分析场景&…...

LDD学习笔记 -- Linux内核模块

LDD学习笔记 -- 内核模块 简介LKM类型Static Linux Kernel ModuleDynamic Linux Kernel ModuleLKM编写语法 syntax详细描述内核头文件用户空间头文件Module Initialization FunctionModule Cleanup FunctionKeyword & Tag宏 __init __exitLKM入口注册Module Metadate&#…...

springboot整合springbatch批处理

springboot整合springbatch实现批处理 简介项目搭建步骤 简介 项目搭建 参考博客【场景实战】Spring Boot Spring Batch 实现批处理任务&#xff0c;保姆级教程 步骤 1.建表 建表sql CREATE TABLE student (id int NOT NULL AUTO_INCREMENT,name varchar(100) NOT NULL C…...

答案解析——C语言—第2次作业:转义字符

本次作业的链接如下&#xff1a;C语言—第2次作业&#xff1a;转义字符 1.下面哪个不是C语言内置的数据类型&#xff1a; C char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数 …...

HTML5-新增表单input属性

新增表单属性 form控件主要新增的属性: autocomplete 是否启用表单的自动完成功能&#xff0c;取值&#xff1a;on&#xff08;默认&#xff09;、off novalidate 提交表单时不进行校验&#xff0c;默认会进行表单校验 autocomplete属性 概念&#xff1a;autocomplete属性…...

css-、串联选择器和后代选择器的用法

& &表示嵌套的上一级&#xff0c;这是sass的语法&#xff0c;代表上一级选择器 .btn {&.primary {background-color: #007bff;color: #fff;} } 编译出来的结果是同一个元素&#xff0c;有两个类名&#xff0c;两个类名之间没有空格&#xff1a; .btn.primary {…...

nifi详细介绍--一款开箱即用、功能强大可靠,可用于处理和分发数据的大数据组件

目录 目录 一、引言 二、NiFi 的历史背景介绍 三、NiFi 是什么&#xff1f; 核心特性 应用领域 四、NIFI 入门 五 、NiFi 工作流程 六、实际应用场景 七、优势总结 一、引言 NiFi&#xff08;Apache NiFi&#xff09;&#xff0c;全名为“Niagara Files”&#xff0…...

K8S Dashboard登录Token过期问题处理

整体思路 用户访问一个页面&#xff0c;在该页面中设置一个超链接&#xff0c;点击跳转至K8S Dashboard&#xff1b;跳转后&#xff0c;使用剪贴板上已复制的Token粘贴到Dashboard页面中的输入框登录即可。 写个定时任务将Token复制到页面上&#xff0c;过期了重新再登…...