pytorch笔记:torch.nn.functional.pad
1 torch.nn.functional.pad函数
torch.nn.functional.pad是pytorch内置的tensor扩充函数,便于对数据集图像或中间层特征进行维度扩充
torch.nn.functional.pad(input, pad, mode='constant', value=0)2 参数说明
| input | 需要扩充维度的tensor |
| pad | 扩充维度,用于预先定义出某维度上的扩充参数 |
| mode | 扩充方法,’constant‘, ‘reflect’ or ‘replicate’三种模式,分别表示常量,反射,复制 |
| value | 扩充时指定补充值 但是value只在mode='constant’有效,即使用value填充在扩充出的新维度位置,而在’reflect’和’replicate’模式下,value不可赋值 |
3 逐维理解torch.nn.functional.pad
为了方便从可视角度上分析torch.nn.functional.pad的实际效果,我们首先给出一个四维的空值矩阵。【维度分别代表(batchsize, channel, height, width)】
import torch import torch.nn.functional as Ft = torch.empty(1, 3, 5, 3) t.size()''' torch.Size([1, 3, 5, 3]) '''3.1 扩展一个维度
我们先只观察t的最后两维,即一个5行3列的矩阵
如果torch.nn.functional.pad中第二个参数pad只定义两个参数,表示只对输入矩阵的最后一个维度进行扩充,不会对前面的维度造成任何影响
import torch import torch.nn.functional as Ft = torch.empty(1, 3, 5, 3) t.size() ''' torch.Size([1, 3, 5, 3]) '''p1d = (1, 2) t1 = F.pad(t, p1d, 'constant', 1) t1.size() ''' torch.Size([1, 3, 5, 6]) '''接下来,从可视化的角度分析一下一维padding。为了方便理解,原始矩阵全为0值,扩充维度全部用1值填充:
通过上图我们可以看到,经过torch.nn.functional.pad后 左侧扩充了1列,右侧扩充了2列,即原始矩阵大小从5×3扩充到5×6,则p1d的参数设置意义为:(左边填充数, 右边填充数)
3.2 扩展两个维度
import torch import torch.nn.functional as Ft = torch.empty(1, 3, 5, 3) t.size() ''' torch.Size([1, 3, 5, 3]) '''p2d = (1, 2, 3, 4) t2 = F.pad(t4d, p2d, 'constant', 2) t2.size() ''' torch.Size([1, 3, 12, 6]) '''同样地,我们可视化看一下效果:
可以看到,维度左边扩充了一列,右侧扩充了2列;上边扩充了3行,下边扩充了4行。
也就是说,前两个参数对最后一个维度有效,后两个参数对倒数第二维有效。
换句话说,p2d参数的实际意义是:(左边填充数, 右边填充数, 上边填充数, 下边填充数)
3.3 扩展三个维度
import torch import torch.nn.functional as Ft = torch.empty(1, 3, 5, 3) t.size() ''' torch.Size([1, 3, 5, 3]) '''p3d = (1, 2, 3, 4, 5, 6) t3 = F.pad(t4d, p3d, 'constant', 3) t3.size() ''' torch.Size([1, 14, 12, 6]) '''同样进行可视化
可以看到,前面扩展了5个维度,后面6个维度
所以p3d的实际意义是:(左边填充数, 右边填充数, 上边填充数, 下边填充数, 前边填充数,后边填充数)
4 总结
也就是说,pad参数的意思是:从最后一个维度开始,维度一前一后扩展]
参考文献:PyTorch碎片:F.pad的图文透彻理解_面壁者-CSDN博客_f.pad
总结
以上是生活随笔为你收集整理的pytorch笔记:torch.nn.functional.pad的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 文巾解题 01.05. 一次编辑
- 下一篇: NTU课程:MAS714(4):贪心