如何在 PyTorch 中使用常数值填充输入张量的边界?


**torch.nn.ConstantPad2D()** 使用常数值填充输入张量的边界。输入张量的尺寸必须为 3D 或 4D,分别为 **(C,H,W) 或 (N,C,H,W)** 格式。其中 **N、C、H、W** 分别代表小批量大小、通道数、高度和宽度。填充沿输入张量的高度和宽度进行。

它接受填充大小 (**padding**) 和常数值 (**value**) 作为参数。填充大小可以是整数或元组。**padding** 对所有边界可以相同,也可以对每个边界不同。

填充可以是整数或 (**左,右,上,下**) 格式的元组。如果 padding 是整数,则所有边界的填充相同。

填充后的张量**高度**增加 **上+下**,而填充后的张量**宽度**增加 **左+右**。它不会改变通道大小或批大小。填充通常用于卷积神经网络 (CNN) 的池化层之后,以保持输入大小。

语法

torch.nn.ConstantPad2D(padding, value)

参数

  • **padding** – 所需的填充大小。一个整数或 (**左,右,上,下**) 格式的元组。

  • **value** – 常数值。输入张量将使用此值进行填充。

步骤

我们可以使用以下步骤来使用常数值填充输入张量的边界:

  • 导入所需的库。在以下所有示例中,所需的 Python 库是 torch。确保你已经安装了它。

import torch
  • 定义输入张量。我们定义一个 4D 张量如下所示。

input = torch.randn(2, 1, 3, 3)
  • 定义填充大小 **padding** 和常数值 **value**,并将它们传递给 **torch.nn.ConstantPad2D()** 并创建一个实例 **pad** 以使用常数值 value 对张量进行填充。填充大小可以相同或不同。

padding = (2,1)
value = 3
pad = nn.ConstantPad2d(padding, value)
  • 使用上面创建的实例 **pad** 使用常数值 **value** 对输入张量进行填充。

output = pad(input)
  • 打印最终填充后的张量。

print("Padded Ternsor:
", output)

示例 1

在下面的 Python 示例中,我们使用常数值 **value=3** 和整数填充大小 2,即 **padding=2** 来填充 3D 和 4D 张量。

# Import the required library
import torch
import torch.nn as nn

# define 3D tensor (C,H,W)
input = torch.tensor([[[ 1, 2],[ 3, 4]]])
print("Input Tensor:
",input) # define padding same for all sides (left, right, top, bottom) # nn.ConstantPad(padding, value) pad = nn.ConstantPad2d(2, 3) # pad the input tensor output = pad(input) print("Padded Ternsor:
", output) # define same padding only for left and right sides pad = nn.ConstantPad2d((2,2), 3) # pad the input tensor output = pad(input) print("Padded Tensor:
", output)

输出

Input Tensor:
   tensor([[[1, 2],
      [3, 4]]])
Padded Tensor:
   tensor([[[3, 3, 3, 3, 3, 3],
      [3, 3, 3, 3, 3, 3],
      [3, 3, 1, 2, 3, 3],
      [3, 3, 3, 4, 3, 3],
      [3, 3, 3, 3, 3, 3],
      [3, 3, 3, 3, 3, 3]]])
Padded Tensor:
   tensor([[[3, 3, 1, 2, 3, 3],
      [3, 3, 3, 4, 3, 3]]])

示例 2

在下面的 Python 示例中,我们使用对输入张量所有边界不同的填充大小来使用常数值进行填充。

# Import the required library
import torch
import torch.nn as nn

# define 3D tensor (C,H,W)
input = torch.tensor([[[ 1, 2],[ 3, 4]]])
print("Input Tensor:
", input) # define padding different for different sides padding = (2,1,2,1) value = 3 pad = nn.ConstantPad2d(padding,value) # pad the input tensor output = pad(input) print("Padded Ternsor:
", output) input = torch.tensor([[[ 1, 2],[ 3, 4]]]) print("Input Tensor:
",input) # define padding different for left and right sides padding = (2,1) value = 3 pad = nn.ConstantPad2d(padding,value) # pad the input tensor output = pad(input) print("Padded Tensor:
", output) # define 4D tensor (N,C,H,W)->for a batch of N tensors input = torch.tensor([[[ 1, 2],[ 3, 4]],       [[ 1, 2],[ 3, 4]]]) print("Input Tensor:
",input) # define padding different for different sides padding = (2,2,1,1) value = 7 pad = nn.ConstantPad2d(padding, value) # pad the input tensor output = pad(input) print("Padded Tensor:
", output)

输出

Input Tensor:
   tensor([[[1, 2],
      [3, 4]]])
Padded Tensor:
   tensor([[[3, 3, 3, 3, 3],
      [3, 3, 3, 3, 3],
      [3, 3, 1, 2, 3],
      [3, 3, 3, 4, 3],
      [3, 3, 3, 3, 3]]])
Input Tensor:
   tensor([[[1, 2],
      [3, 4]]])
Padded Tensor:
   tensor([[[3, 3, 1, 2, 3],
      [3, 3, 3, 4, 3]]])
Input Tensor:
   tensor([[[1, 2],
      [3, 4]],
      [[1, 2],
      [3, 4]]])
Padded Ternsor:
   tensor([[[7, 7, 7, 7, 7, 7],
      [7, 7, 1, 2, 7, 7],
      [7, 7, 3, 4, 7, 7],
      [7, 7, 7, 7, 7, 7]],
      [[7, 7, 7, 7, 7, 7],
      [7, 7, 1, 2, 7, 7],
      [7, 7, 3, 4, 7, 7],
      [7, 7, 7, 7, 7, 7]]])

更新于:2022年1月25日

463 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告