函数测试
import torch
import torch.nn.functional as F
import numpy as np
x = torch.from_numpy(np.arange(8).reshape((2,4)))
print(x.shape)
xx = torch.unsqueeze(x, 1)
print('x:' + xx.shape)
xxx = F.pad(xx, [2,2])
print('pad(xx, [2,2]):' + xxx.shape)
xxx = F.pad(xx, [0,0,2,2])
print('pad(xx, [0,0,2,2]):' + xxx.shape)
xxx = F.pad(xx, [0,0,0,0,2,2])
print('pad(xx, [0,0,0,0,2,2]):' + xxx.shape)
输出:
torch.Size([2, 4])
x: torch.Size([2, 1, 4])
pad(xx, [2,2]): torch.Size([2, 1, 8])
pad(xx, [0,0,2,2]): torch.Size([2, 5, 4])
pad(xx, [0,0,0,0,2,2]): torch.Size([6, 1, 4])
要求:
- pad的维数必须是2的整数倍,比如,最短应该是[2,2],而不能是[2].
- pad的输入tensor维数可以是大于等于1的任意维数N,pad的维度最大时N2,乘以2的原因是每个维度方向都可以是前面填充或者后面填充,当是小于N2的偶数时,表示后面的所有默认为0,即pad参数输入是[2,2]时,默认为[2,2,0,0,0,0]等,总长度为N*2;
- pad参数的顺序和tensor的shape维数顺序相反;
- 填充的方式有3中:(mode=“constant”)表示全部填充0;(mode=“reflect”)表示全部填充平滑拟合值;(mode=“replicate”)表示填充值是复制的相邻值。
- NotImplementedError: Only 3D, 4D, 5D padding with non-constant padding are supported for now ,目前只有3D以上维度的tensor才支持mode=“reflect”和mode=“replicate”。
图像示例
import torch.nn.functional as F
import torch
from PIL import Image
import numpy as np
im=Image.open("heibai.jpg",'r')
X=torch.Tensor(np.asarray(im))
print("shape:",X.shape)
dim=(20,20,20,20)
X=F.pad(X,dim,"constant",value=0)
padX=X.data.numpy()
padim=Image.fromarray(padX)
padim=padim.convert("RGB")#这里必须转为RGB不然会
padim.save("padded.jpg","jpeg")
padim.show()
print("shape:",padX.shape)
保存图片:
参考来源链接
感谢各位博主的分享。
Pytorch之torch.nn.functional.pad函数详解