如何在 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]]])