pytorch 中pad函数toch.nn.functional.pad()的用法
padding操作是给图像外围加像素点。
为了实际说明操作过程,这里我们使用一张实际的图片来做一下处理。
这张图片是大小是(256,256),使用pad来给它加上一个黑色的边框。具体代码如下:
importtorch.nn,functionalasF importtorch fromPILimportImage im=Image.open("heibai.jpg",'r') X=torch.Tensor(np.asarray(im)) print("shape:",X.shape) dim=(10,10,10,10) 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)
输出:
shape:torch.Size([256,256]) shape:(276,276)
可以看出给原图四个方向给加上10维度的0,维度变为256+10+10得到的图像如下:
我们在举几个简单例子:
x=np.asarray([[[1,2],[1,2]]]) X=torch.Tensor(x) print(X.shape) pad_dims=( 2,2, 2,2, 1,1, ) X=F.pad(X,pad_dims,"constant") print(X.shape) print(X)
输出:
torch.Size([1,2,2]) torch.Size([3,6,6]) tensor([[[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.,0.,0.,0.,0.], [0.,0.,0.,0.,0.,0.]], [[0.,0.,0.,0.,0.,0.], [0.,0.,0.,0.,0.,0.], [0.,0.,1.,2.,0.,0.], [0.,0.,1.,2.,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.], [0.,0.,0.,0.,0.,0.], [0.,0.,0.,0.,0.,0.], [0.,0.,0.,0.,0.,0.], [0.,0.,0.,0.,0.,0.]]])
可以知若pid_sim为(2,2,2,2,1,1)则原维度变化是2+2+2=6,1+1+1=3.也就是第一个(2,2)pad的是最后一个维度,第二个(2,2)pad是倒数第二个维度,第三个(1,1)pad是第一个维度。
再举一个四维度的,但是只pad三个维度:
x=np.asarray([[[[1,2],[1,2]]]]) X=torch.Tensor(x)#(1,2,2) print(X.shape) pad_dims=( 2,2, 2,2, 1,1, ) X=F.pad(X,pad_dims,"constant")#(1,1,12,12) print(X.shape) print(X)
输出:
torch.Size([1,1,2,2]) torch.Size([1,3,6,6]) tensor([[[[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.,0.,0.,0.,0.], [0.,0.,0.,0.,0.,0.]], [[0.,0.,0.,0.,0.,0.], [0.,0.,0.,0.,0.,0.], [0.,0.,1.,2.,0.,0.], [0.,0.,1.,2.,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.], [0.,0.,0.,0.,0.,0.], [0.,0.,0.,0.,0.,0.], [0.,0.,0.,0.,0.,0.], [0.,0.,0.,0.,0.,0.]]]])
再举一个四维度的,pad四个维度:
x=np.asarray([[[[1,2],[1,2]]]]) X=torch.Tensor(x)#(1,2,2) print(X.shape) pad_dims=( 2,2, 2,2, 1,1, 2,2 ) X=F.pad(X,pad_dims,"constant")#(1,1,12,12) print(X.shape) print(X)
输出:
torch.Size([1,1,2,2]) torch.Size([5,3,6,6]) tensor([[[[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.,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.,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.], [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.,0.,0.,0.,0.]]], .........太多了
以上这篇pytorch中pad函数toch.nn.functional.pad()的用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。