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 F

t = 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 F

t = 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 F

t = 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 F

t = 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

### 回答1: 第1关:torch.nn.module torch.nn.module是PyTorch中的一个基类,用于定义神经网络模型。它提供了许多有用的方法和属性,例如parameters()和zero_grad(),可以方便地管理模型的参数和梯度。我们可以通过继承torch.nn.module来定义自己的神经网络模型,并在训练过程中使用它们。 ### 回答2: 第1关:torch.nn.module torch.nn.module 是 PyTorch 中用于构建神经网络模型的基类。每个神经网络模型都是由多个层(layer)组成的,每个层都是由不同的参数(如权重和偏置)构成的,并且需要进行训练以优化这些参数,以使其在给定任务上表现最佳。 torch.nn.module 提供了各种方法和属性来管理这些网络层和参数,使得模型的设计、构建、训练和评估变得非常简单。在这个基类中,所有的子层都可以通过访问 nn.Module 的属性和方法来获取和访问其参数,同时也可以轻松地控制它们的训练过程。 在构建神经网络时,你需要继承 nn.Module 并定义模型的前向传递函数 forward。在 forward 函数中,你可以将网络的多个层连接在一起来执行特定的计算,从而生成模型的输出。同时,你还需要在 __init__ 函数中定义所有层和参数,并将它们设置为 nn.Parameter 或 nn.ModuleList 对象。这将使你可以使用 nn.Module 的方法来访问、管理和训练它们。 对于每次前向传递,nn.Module 的对象都会自动调用各个层的 forward 函数,并沿着网络的方向反向传播误差,以更新参数和优化模型。在训练过程中,你还可以指定不同的优化方法和损失函数来优化模型的性能,以使模型可以更高效地学习并适应数据。 总之,torch.nn.module 是 PyTorch 中构建深度神经网络模型的基础,提供了一种非常灵活和易用的方式来设计、构建、训练和评估神经网络,在实现复杂的模型时非常实用。 ### 回答3: PyTorch中的torch.nn.module是深度学习中常见的模型组件,它是构建神经网络的基本组件。torch.nn.module在PyTorch中被广泛使用,可以用于创建各种深度学习模型,如卷积神经网络、循环神经网络、transformer等。 torch.nn.module的主要作用是简化神经网络的构建过程。它对于神经网络的构建提供了更高层次的抽象,可以仅使用少量的代码来搭建复杂的神经网络。使用torch.nn.module可以更加方便地管理网络中的参数、权重以及偏置项。 当使用torch.nn.module的时候,需要将每个层或者组件写成一个继承自nn.Module的Python类。每个继承自nn.Module的类都必须实现init函数和forward函数。init函数用于初始化模型层的参数,forward函数定义了模型的前向传播过程。 除了init和forward函数,nn.Module还具有其他常用的方法和属性。其中包括paramters方法,它可以用于获取所有模型层的权重和偏置项;zero_grad方法,用于将所有的梯度清零;还包括train和eval方法,可以用于控制模型处于训练或者评估状态。 总之,torch.nn.module是PyTorch中非常重要的组件,在深度学习中被广泛应用。它的抽象级别可以使得深度学习的构建变得更加简单和快捷,同时还提供了方便的参数管理和训练流程管理方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值