【Pytorch--代码技巧】各种论文代码常见技巧

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 博主在阅读论文原代码的时候常常看见一些没有见过的代码技巧,特此将这些内容进行汇总

 博主在阅读论文原代码的时候常常看见一些没有见过的代码技巧,特此将这些内容进行汇总

1 torch.view()

作用:重置Tensor对象维度

注意点:参数中的-1表示系统自动判断,因此每个view里面只能出现一个-1

x = torch.randn(4,4)
# 重置为向量
x.view(16).size()
# 重置为多维矩阵
x.view(2,2,4).size()
# -1 数字用法
x.view(-1,8).sieze

image.gif

torch.Size([16])
torch.Size([2,2,4])
torch.Size([2,8])

image.gif

2  torch.unsqueeze()

作用:升维,最常见的就是unsqueeze(-1)表示将一维升到二维

x = torch.randn(4)
x = x.unsqueeze(-1)

image.gif

torch.Size([16,1])

image.gif

3 torch.expand()

作用:升维

# x 维度为[4]
x =torch.tensor([1,2,3,4])
# x1 维度为[3,1,4]
x1 = x.expend(3,1,4)
print(x1)
>>> 
tensor([[[1, 2, 3, 4]],
        [[1, 2, 3, 4]],
        [[1, 2, 3, 4]]])

image.gif

torch.Size([16,1])

image.gif

4 torch.transpose(0, 1)

作用:转置

注意:

1 只能拓展维度,比如 A的shape为 2x4的,不能 A.expend(1,4),只能保证原结构不变,在前面增维,比如A.shape(1,1,4)

2 可以增加多维,比如x的shape为(4),x.expend(2,2,1,4)只需保证本身是4

3 不能拓展低维,比如x的shape为(4),不能x.expend(4,2)

x = torch.randn(16,1)
x = x.transpose(0,1)

image.gif

torch.Size([1,16])

image.gif

5 去除对角线元素

一般使用z方法,因为x方法对float不可用而z可以

x = torch.randint(1, 4, (4, 4))
y = x ^ torch.diag_embed(torch.diag(x))
z = x - torch.diag_embed(torch.diag(x))

image.gif

tensor([[2, 2, 2, 1],
        [3, 1, 1, 2],
        [3, 1, 3, 1],
        [3, 1, 2, 2]])
tensor([[0, 2, 2, 1],
        [3, 0, 1, 2],
        [3, 1, 0, 1],
        [3, 1, 2, 0]])
tensor([[0, 2, 2, 1],
        [3, 0, 1, 2],
        [3, 1, 0, 1],
        [3, 1, 2, 0]])

image.gif

6 torch.gather()

作用:根据维度dim按照索引列表index从input中选取指定元素

b = torch.Tensor([[1,2,3],[4,5,6]])
print(b)
index_1 = torch.LongTensor([[0,1],[2,0]])
index_2 = torch.LongTensor([[0,1,1],[0,0,0]])
print (torch.gather(b, dim=1, index=index_1))
print (torch.gather(b, dim=0, index=index_2))

image.gif

tensor([[1., 2., 3.],
        [4., 5., 6.]])
tensor([[1., 2.],
        [6., 4.]])
tensor([[1., 5., 6.],
        [1., 2., 3.]])

image.gif

7 nn.Parameter()

作用:将一个不可训练的tensor转换为一个有梯度的可训练的tensor。往往用在需要自己定义的bisa中

self.bias = nn.Parameter(torch.ones([5]))
output = self.Weight(x) + self.bias

image.gif

8 nn.Sequential

作用:将多个网络模块组合成一个模块,需要注意的是相邻的两个网络模块之间的输入输出尺寸

self.block = nn.Sequential(
            nn.Dropout(0.5),
            nn.Linear(512 * 2, 128),
            nn.Linear(128, 16),
            nn.Linear(16, num_classes),
            nn.Softmax(dim=1)
        )

image.gif

9 nn.moduleList

作用:将多个网络模块放到一个类List中,后续可以从中进行调用

# 定义三个输入channels为1,输出channels为2,卷积核为[2,768]、[3,768]、[4,768]的卷积
        self.convs = nn.ModuleList(
            [nn.Conv2d(in_channels=1, out_channels=self.num_filters,
                       kernel_size=(k, 768), ) for k in self.filter_sizes])

image.gif

10 nn.MaxPool2d

作用:MaxPooling,提取重要信息,去掉不重要信息,从而减少计算开销

image.gif编辑

其一共有6个基本参数

    • kernel_size:池化窗口大小,输入单值如3则为3×3,输入元组如(3,2)则为3×2
    • stride:步长,单值元组均可。默认与池化窗口大小一致
    • padding:填充,单值元组均可。默认为0
    • dilation:控制窗口中元素步幅,不重要!
    • return_indices:布尔类型,返回最大值位置索引
    • ceil_mode:布尔类型,默认为False。False为向下取整,True为向上取整

    11 permute()

    作用:根据位置进行维度转化

    >>> x = torch.randn(2, 3, 5) 
    >>> x.size() 
    torch.Size([2, 3, 5]) 
    >>> x.permute(2, 0, 1).size() 
    torch.Size([5, 2, 3])

    image.gif

    12 torch.cat(inputs,dim)

    作用:根据维度进行Tensor拼接

    b = torch.cat(a, 4)

    image.gif

    13 torch.clamp(input, min, max, out=None)

    作用:将维度限制在min和max之间

    sum_mask = torch.clamp(sum_mask, min=1e-9)

    image.gif


    目录
    相关文章
    |
    18天前
    |
    存储 物联网 PyTorch
    基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
    **Torchtune**是由PyTorch团队开发的一个专门用于LLM微调的库。它旨在简化LLM的微调流程,提供了一系列高级API和预置的最佳实践
    125 59
    基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
    |
    2月前
    |
    机器学习/深度学习 PyTorch 算法框架/工具
    CNN中的注意力机制综合指南:从理论到Pytorch代码实现
    注意力机制已成为深度学习模型的关键组件,尤其在卷积神经网络(CNN)中发挥了重要作用。通过使模型关注输入数据中最相关的部分,注意力机制显著提升了CNN在图像分类、目标检测和语义分割等任务中的表现。本文将详细介绍CNN中的注意力机制,包括其基本概念、不同类型(如通道注意力、空间注意力和混合注意力)以及实际实现方法。此外,还将探讨注意力机制在多个计算机视觉任务中的应用效果及其面临的挑战。无论是图像分类还是医学图像分析,注意力机制都能显著提升模型性能,并在不断发展的深度学习领域中扮演重要角色。
    92 10
    |
    5月前
    |
    机器学习/深度学习 PyTorch 算法框架/工具
    【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
    【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
    |
    5月前
    |
    机器学习/深度学习 PyTorch 算法框架/工具
    【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
    【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
    |
    1月前
    |
    机器学习/深度学习 PyTorch 算法框架/工具
    聊一聊计算机视觉中常用的注意力机制以及Pytorch代码实现
    本文介绍了几种常用的计算机视觉注意力机制及其PyTorch实现,包括SENet、CBAM、BAM、ECA-Net、SA-Net、Polarized Self-Attention、Spatial Group-wise Enhance和Coordinate Attention等,每种方法都附有详细的网络结构说明和实验结果分析。通过这些注意力机制的应用,可以有效提升模型在目标检测任务上的性能。此外,作者还提供了实验数据集的基本情况及baseline模型的选择与实验结果,方便读者理解和复现。
    27 0
    聊一聊计算机视觉中常用的注意力机制以及Pytorch代码实现
    |
    3月前
    |
    机器学习/深度学习 PyTorch 算法框架/工具
    PyTorch代码实现神经网络
    这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
    |
    6月前
    |
    机器学习/深度学习 存储 并行计算
    深入解析xLSTM:LSTM架构的演进及PyTorch代码实现详解
    xLSTM的新闻大家可能前几天都已经看过了,原作者提出更强的xLSTM,可以将LSTM扩展到数十亿参数规模,我们今天就来将其与原始的lstm进行一个详细的对比,然后再使用Pytorch实现一个简单的xLSTM。
    269 2
    |
    5月前
    |
    机器学习/深度学习 PyTorch 算法框架/工具
    【从零开始学习深度学习】27.卷积神经网络之VGG11模型介绍及其Pytorch实现【含完整代码】
    【从零开始学习深度学习】27.卷积神经网络之VGG11模型介绍及其Pytorch实现【含完整代码】
    |
    5月前
    |
    机器学习/深度学习 算法 PyTorch
    【从零开始学习深度学习】25.卷积神经网络之LeNet模型介绍及其Pytorch实现【含完整代码】
    【从零开始学习深度学习】25.卷积神经网络之LeNet模型介绍及其Pytorch实现【含完整代码】
    |
    5月前
    |
    机器学习/深度学习 PyTorch 算法框架/工具
    【从零开始学习深度学习】29.卷积神经网络之GoogLeNet模型介绍及用Pytorch实现GoogLeNet模型【含完整代码】
    【从零开始学习深度学习】29.卷积神经网络之GoogLeNet模型介绍及用Pytorch实现GoogLeNet模型【含完整代码】