torch.nn.functional.pad(input, pad, mode='constant', value=0)

填充Tensor。

填充大小:

填充input的某些维度的填充大小从最后一个维度开始向前描述。 ⌊ l e n ( p a d ) 2 ⌋ \left \lfloor \frac{len(pad)}{2} \right \rfloor 2len(pad)input的维度将被填充。

例如,只填充输入张量的最后一个维度,那么pad的形式为:(padding_left, padding_right);要填充输入张量的最后两个维度,请使用(padding_left, padding_right, padding_top, padding_bottom);要填充最后3个维度,请使用(padding_left, padding_right, padding_top, padding_bottom, padding_front, padding_back)。

填充模式:

具体请参考 torch.nn.ConstantPad2d, torch.nn.ReflectionPad2d, 和 torch.nn.ReplicationPad2d 了解有关每个填充模式如何工作的具体示例。

对任意维度实现常量填充。复制填充用于填充5D输入张量的最后3个维度,或4D输入张量的最后2个维度,或3D输入张量的最后一个维度。反射填充仅用于填充4D输入张量的最后2个维度或3D输入张量的最后一个维度。

使用CUDA后端时,此操作可能会在其不易关闭的向后传递中导致不确定行为。请参见背景再现性

参数

  • input (Tensor) – N维Tensor
  • pad (tuple) –
  • mode – constantreflectreplicatecircular,默认值:constant
  • value – constant填充的填充值,默认值:0

Examples

import torch
import torch.nn.functional as F

a = torch.randn(1, 2, 3)
a
Out[5]: 
tensor([[[ 0.7564, -1.8093, -0.7655],
         [-0.2113,  0.0956,  0.8980]]])
         
p = (2, 3)
o = F.pad(a, p, "constant", 0)

o
Out[8]: 
tensor([[[ 0.0000,  0.0000,  0.7564, -1.8093, -0.7655,  0.0000,  0.0000, 0.0000],
         [ 0.0000,  0.0000, -0.2113,  0.0956,  0.8980,  0.0000,  0.0000, 0.0000]]])
>>> t4d = torch.empty(3, 3, 4, 2)
>>> p1d = (1, 1) # pad last dim by 1 on each side
>>> out = F.pad(t4d, p1d, "constant", 0)  # effectively zero padding
>>> print(out.size())
torch.Size([3, 3, 4, 4])
>>> p2d = (1, 1, 2, 2) # pad last dim by (1, 1) and 2nd to last by (2, 2)
>>> out = F.pad(t4d, p2d, "constant", 0)
>>> print(out.size())
torch.Size([3, 3, 8, 4])
>>> t4d = torch.empty(3, 3, 4, 2)
>>> p3d = (0, 1, 2, 1, 3, 3) # pad by (0, 1), (2, 1), and (3, 3)
>>> out = F.pad(t4d, p3d, "constant", 0)
>>> print(out.size())
torch.Size([3, 9, 7, 3])