How to Pad PyTorch Tensors
Code 1
torch.nn.functional.pad(input, pad, mode='constant', value=0.0)
input: The tensor to padpad: Where to padmode: Method of paddingvalue: Value for padding
Description
padWhen using a tensor of dimension $n$ as an input, you can pass up to $2n-$pairs of arguments.
$$ ((n-1)_{\text{low}}, (n-1)_{\text{up}}, (n-2)_{\text{low}}, (n-2)_{\text{up}}, \dots, 1_{\text{low}}, 1_{\text{up}}, 0_{\text{low}}, 0_{\text{up}}) $$
$i_{\text{low}}$ indicates how many values to pad before the $i$th dimension’s lower index, i.e., before the $0$th value.
$i_{\text{up}}$ indicates how many values to pad after the $i$th dimension’s higher index, i.e., after the last value.
>>> A = torch.ones(2,3) >>> A tensor([[1., 1., 1.], [1., 1., 1.]]) >>> PA = F.pad(A, (1,2,3,4), "constant", 0) tensor([[0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.], [0., 1., 1., 1., 0., 0.], [0., 1., 1., 1., 0., 0.], [0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0.]]) >>> PA.shape torch.Size([9, 6])modeconstantmaps all specified areas to a fixed constant.>>> F.pad(A, (2,3), "constant", 3) tensor([[3., 3., 1., 1., 1., 3., 3., 3.], [3., 3., 1., 1., 1., 3., 3., 3.]])reflectpads with symmetrical copies based on the zeroth and last values of each dimension. For some reason, it only accepts tensors with three or more dimensions and the padding size is fixed to $2(n-2)-$ pairs. Thus, the zeroth and first dimensions are not padded.>>> B = torch.tensor([[[1,2,3,4,5.]],[[6,7,8,9,10]]] tensor([[[ 1., 2., 3., 4., 5.]], [[ 6., 7., 8., 9., 10.]]]) >>> F.pad(B, (2,3), 'reflect') tensor([[[ 3., 2., 1., 2., 3., 4., 5., 4., 3., 2.]], [[ 8., 7., 6., 7., 8., 9., 10., 9., 8., 7.]]])replicatedirectly copies the zeroth and last values for padding, andcircularpads such that the values of each dimension are circular.
