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 –
constant
、reflect
、replicate
、circular
,默认值: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])