欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

pytorch笔记:torch.nn.functional.pad

发布时间:2025/4/5 72 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。