如何在 PyTorch 中使用零填充输入张量边界?


**torch.nn.ZeroPad2D()** 使用零填充输入张量边界。它采用填充大小 (**padding**) 作为参数。填充大小可以是整数或元组。所有边界或每个边界的填充可能相同。

**padding** 可以是整数或 **(left, right, top, bottom)** 格式的元组。如果它是整数,则所有边界的填充都相同。填充张量的**高度**增加 **top+bottom**,而填充张量的**宽度**增加 **left+right**。它不会更改通道大小或批次大小。填充通常在池化层之后在卷积神经网络 (CNN) 中使用,以保持输入大小。

语法

torch.nn.ZeroPad2D(padding)

参数

  • **padding** – 期望的填充大小。整数或 (**left, right, top, bottom**) 格式的元组。

输入张量的大小必须为 3D 或 4D,格式分别为 (**C, H, W**) 或 (**N, C, H, W**) ,其中 **N, C, H, W** 分别表示小批量大小、通道数、高度和宽度。

步骤

我们可以使用以下步骤用零填充输入张量边界:

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

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

input = torch.randn(2, 1, 3, 3)
  • 定义填充大小并将其传递给 **torch.nn.ZeroPad2D()** 并创建一个实例 **pad** 以用零填充张量。填充大小可以相同或不同。

padding = (2,1)
pad = nn.ZeroPad2d(padding)
  • 使用上面创建的实例 **pad** 用零填充输入张量。

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

print("Padded Ternsor:
", output)

示例 1

在下面的 Python 示例中,我们使用整数填充大小 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) pad = nn.ZeroPad2d(2) # pad the input tensor output = pad(input) print("Padded Ternsor:
", output) # define 4D tensor (N,C,H,W)->for a batch of N tensors input = torch.randn(2, 1, 3, 3) print("Input Tensor:
",input) # define padding same for all sides (left, right, top, bottom) pad = nn.ZeroPad2d(2) # pad the input tensor output = pad(input) print("Padded Tensor:
", output)

输出

Input Tensor:
   tensor([[[1, 2],
      [3, 4]]])
Padded Tensor:
   tensor([[[0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0],
      [0, 0, 1, 2, 0, 0],
      [0, 0, 3, 4, 0, 0],
      [0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0]]])
Input Tensor:
   tensor([[[[-0.8336, -0.7609, 2.2278],
      [-0.5882, -1.2273, 0.3331],
      [ 2.1541, -0.0235, -0.4785]]],

      [[[ 0.8795, 2.6868, 1.2850],
      [-1.6687, -0.8479, 0.3797],
      [-1.5313, 0.5221, -1.5769]]]])
Padded Tensor:
   tensor([[[[ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000],
      [ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000],
      [ 0.0000, 0.0000, -0.8336, -0.7609, 2.2278, 0.0000, 0.0000],
      [ 0.0000, 0.0000, -0.5882, -1.2273, 0.3331, 0.0000, 0.0000],
      [ 0.0000, 0.0000, 2.1541, -0.0235, -0.4785, 0.0000, 0.0000],
      [ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000],
      [ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000]]],

      [[[ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000],
      [ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000],
      [ 0.0000, 0.0000, 0.8795, 2.6868, 1.2850, 0.0000, 0.0000],
      [ 0.0000, 0.0000, -1.6687, -0.8479, 0.3797, 0.0000, 0.0000],
      [ 0.0000, 0.0000, -1.5313, 0.5221, -1.5769, 0.0000, 0.0000],
      [ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000],
      [ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000]]]])

示例 2

在下面的 Python 示例中,我们使用对输入张量所有边界具有不同填充大小的填充大小来填充 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 different for different sides padding = (2,1,2,1) pad = nn.ZeroPad2d(padding) # 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) pad = nn.ZeroPad2d(padding) # pad the input tensor output = pad(input) print("Padded Ternsor:
", 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) pad = nn.ZeroPad2d(padding) # pad the input tensor output = pad(input) print("Padded Ternsor:
", output)

输出

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

      [[0, 0, 0, 0, 0, 0],
      [0, 0, 1, 2, 0, 0],
      [0, 0, 3, 4, 0, 0],
      [0, 0, 0, 0, 0, 0]]])

更新于:2022年1月25日

3K+ 次浏览

启动您的 职业生涯

完成课程获得认证

开始学习
广告