torch.nn.functional.pad是PyTorch内置的矩阵填充函数
(1).torch.nn.functional.pad函数详细描述如下:
torch.nn.functional.pad(input, pad, mode,value )
Args:
"""
input:四维或者五维的tensor Variabe
pad:不同Tensor的填充方式
1.四维Tensor:传入四元素tuple(pad_l, pad_r, pad_t, pad_b),
指的是(左填充,右填充,上填充,下填充),其数值代表填充次数
2.六维Tensor:传入六元素tuple(pleft, pright, ptop, pbottom, pfront, pback),
指的是(左填充,右填充,上填充,下填充,前填充,后填充),其数值代表填充次数
mode: ’constant‘, ‘reflect’ or ‘replicate’三种模式,指的是常量,反射,复制三种模式
value:填充的数值,在"contant"模式下默认填充0,mode="reflect" or "replicate"时没有
value参数
"""
使用举例:
import numpy as np
import torch
import torch.nn.functional as F
m=np.asarray([[[1,1],[1,1]]])
m=torch.Tensor(m)
print(m)
print(m.shape)
输出:
tensor([[[1., 1.],
[1., 1.]]])torch.Size([1, 2, 2])
可以出m是一个三维向量,下面我们继续:
pad_dims = (
2, 2,
0, 0,
0, 0,
)
x=F.pad(m,pad_dims,"constant")
print(x)
print(x.shape)
输出:
tensor([[[0., 0., 1., 1., 0., 0.],
[0., 0., 1., 1., 0., 0.]]])
torch.Size([1, 2, 6])什么意思?这里在第一个位置增加的2,2表示横向补两行0,大概就是下面的意思。
下面继续:
pad_dims = (
0, 0,
2, 2,
0, 0,
)
x=F.pad(m,pad_dims,"constant")
print(x)
print(x.shape)
输出:
tensor([[[0., 0.],
[0., 0.],
[1., 1.],
[1., 1.],
[0., 0.],
[0., 0.]]])
torch.Size([1, 6, 2])这样就是纵向补了两行0,但是依然还是一个维度,意思是这样:
继续
pad_dims = (
0, 0,
0, 0,
1, 1,
)
x=F.pad(m,pad_dims,"constant")
print(x)
print(x.shape)
输出:
相信你已经猜到了
tensor([[[0., 0.],
[0., 0.]],[[1., 1.],
[1., 1.]],[[0., 0.],
[0., 0.]]])
torch.Size([3, 2, 2])正是维度上被填了0,这里是1,1.所以补了两个维度的0。画图这样理解