torch.nn.functional.pad()函数的使用

函数测试

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函数详解

pytorch 中pad函数toch.nn.functional.pad()的使用

猜你喜欢

转载自blog.csdn.net/u011913417/article/details/111246249