
Pytorch
文章平均质量分 81
运用Pytorch架构训练深度学习算法模型相关的博客
ViatorSun
深度学习算法工程师,Github开源世界贡献者,专注于『计算机视觉、多模态大模型』领域
展开
-
「解析」Pytorch 转置卷积 & 内部计算
在图像分割以及其他领域可能会看到转置卷积,但是查看官方文档好像理解也有点困难,网上的博客好像也没写太清楚,特别是转置卷积内部的运算过程,个人觉得只有真正了解了转置卷积的内部运算过程,才能掌握转置卷积,只记公式是无法掌握转置卷积的。此外由于最近在复现 TSGB算法需要,将 转置卷积整理了下,希望对各位小伙伴有帮助!卷积运算不会增大 input 的尺度,通常是不变,或者降低而转置卷积则可以用来增大 input 的尺度转置卷积原论文:Deconvolutional Networks文章目录1、公式2.原创 2022-04-05 23:50:00 · 3838 阅读 · 0 评论 -
简述 Pytorch框架
首先声明下,这篇博客不是讲解 Pytorch 内部细节的文章,更多的是宏观上的讲解,希望读者可以站在 前人的肩膀上看清 Pytorch框架组成,同时希望读者可以走的更远更多关于 Pytorch 的博文,有兴趣的小伙伴可以关注我的 Pytorch专栏文章目录1、Pytorch 核心模块1.1 torch 模块1.2 torch.Storage1.3 torch.Tensor 张量torch.tensor & torch.TensorVariable (已抛弃)1.4 torch.nn1.5 t.原创 2020-07-11 02:00:38 · 2721 阅读 · 3 评论 -
「Pytorch」如何理解深度学习中的算子(operator)
在深度学习中,算子是实现各种计算和转换的基本单位,理解这些算子的性质和作用对于设计和优化深度学习模型至关重要。不同的算子不仅构成了模型的结构,还决定了模型的性能和效率。PyTorch 官方文档PyTorch GitHub 仓库。原创 2024-10-28 15:38:33 · 1434 阅读 · 0 评论 -
「Pytorch」解析 nn.Embedding 词嵌入 及反推输入
在Pytorch里面有三种编码方式,Embedding 就是其中之一,不同于 one_hot 需要用同长度的张量存 Embedding将单词映射为稠密向量,并且指定 embedding_dim维度。通过 Embedding层 转换的数据并不是经过词典映射的,而是原始数据。Embedding的输出可以作为神经网络的输入,进一步进行训练和处理。在深度学习中,Embedding是将离散的输入映射为连续的向量表示的一种技术。它在自然语言处理和推荐系统等任务中广泛使用。其实一般就是前用两个参数。原创 2024-08-14 16:39:36 · 659 阅读 · 0 评论 -
「Pytorch」BF16 & Mixed Precision Training
在深度学习领域,神经网络的训练性能瓶颈常常出现在 GPU显存的使用上。主要表现为两方面:1. 单卡上可容纳的模型和数据量有限;2. 显存与计算单元之间的带宽和延迟限制了运算速度;为了解决显卡瓶颈的问题,涌现了不同的解决方法。模型参数量估计为了更好地估算模型所要占用的显存,首先需要分析模型训练过程中有哪些部分需要消耗存储空间。在 "ZeRO: Memory Optimizations Toward Training Trillion Parameter Model" 中提出,模型在训练时,主要有两大部分的原创 2024-08-08 16:35:30 · 1998 阅读 · 0 评论 -
「解析」Cosine-Warmup 学习率策略
梯度下降算法需要我们设置一个值,用来控制权重更新幅度,我们将其称之为学习率。它是控制模型学习速度的超参数。学习率越小,loss的变化越慢。虽然使用较低的学习速率可以确保不会错过任何局部极小值,但这也意味着模型收敛速度较慢。因此,在训练前期,权重处于随机初始化状态,我们可以设置一个相对较大的学习速率以加快收敛速度。在训练后期,权重接近最优值,使用相对较小的学习率可以防止模型在收敛的过程中发生震荡。原创 2024-07-10 17:45:07 · 1306 阅读 · 0 评论 -
「解析」cache训练模型增强性能
实验采用的模型是 YOLOv5-7.0版本,m模型配置,便于实验测试,以数据集为例,可以看出来,通过 ram 方式的训练并没有很明显的提升,分析原因可能是 硬盘本身的读取速度较快,可以满足显卡的吞吐,但是通过 ram形式训练占用内存比较大,如果内存足够的小伙伴可以尝试使用 ram形式进行训练,如果内存较小的情况,可以考虑更换速度较快的固态硬盘用作数据盘。此外对于系统开设较多进程的情况,会降占用CPU的性能以及硬盘的读取速度,从而降低 GPU的数据读取,影响运算性能,故还是建议使用ram形式进行训练。原创 2023-04-23 13:42:43 · 750 阅读 · 0 评论 -
「解析」Pytorch 池化层的反向传播 附代码
在深度学习中卷积计算可能是较为头痛的地方,池化层应该是最简单的一种运算,但是当看到池化层反向传播时,整个人都是懵的,之前从没涉及过,在学习的过程中,搜集资料也发现寥寥无几,一方面为了自我学习,另一方面希望给有需求的小伙伴分享下,不要再走弯路,因此整理了这篇文章,希望对大家有帮助!1、最大池化层 反向传播nn.MaxPool2d(kernel_size,stride=None, padding=0, dilation=1, return_indices=False, ceil_.原创 2022-04-12 17:19:59 · 2472 阅读 · 2 评论 -
PyTorch 自定义卷积核「数据」
在做一些模型分析的时候可能需要将卷积核内的参数定制化(eg:全为1),此时就没办法直接使用模型中定义好的卷积了,需要将其数据给修改下方能使用,但是其输入输出通道以及卷积核大小需要留用,在此就可以单独的将 卷积的 weight/bias 进行从新赋值即可:⚠️注意在给 conv.weight/bais.data 赋值的时候,其类型必须是 Tensor维度必须符合卷积核的尺寸,即conv.weight : dim=(in_dim, out_dim, kerneal_size)conv.bias原创 2022-04-04 23:16:00 · 4534 阅读 · 3 评论 -
解析「标准化 & 归一化」操作
标准化 & 归一化 是常见的数据处理方法,主要用途也都是特征缩放变换更多标准化&归一化的讲解,大家可以前往 标准化和归一化什么区别?归一化(Normalization):将数据变换到 某个固定区间中,通常是 [0,1]归一化( min-max Normalization)=xi−xminxmax−xmin( mean Normalization)=xi−mean(x)xmax−xmin\text{归一化( min-max Normalizati原创 2022-03-20 16:28:25 · 879 阅读 · 0 评论 -
Pytorch 获取模型 Params/FLOPS
1、自定义 Params Pytorch依据其内建接口自己写代码获取模型参数情况,大家可以参考Pytorch提供的model.parameters() 接口来获取相应参数的size来实现,对于该参数是否属于可训练参数,那么可以依据Pytorch提供的requires_grad标志位来进行判断,具体方法如下代码所示:原创 2022-03-16 23:46:00 · 3556 阅读 · 6 评论 -
「解析」CosineLRScheduler 调度器
在深度学习的训练过程中,需要配置一些超参数,但是在配置的过程中,往往需要根据经验来设置,这对缺乏经验的小白十分不友好,因此就有了动态调整学习率的算法,统称为 LRScheduler 学习率调度器。在此推荐一种十分受欢迎的 调度器 即:CosineLRScheduler。本文源自论文 SGDR: Stochastic Gradient Descent with Warm Restarts ,代码可参考 cosine.py。⚠️注意:在论文中,这个调度器被称为SGDR,但在实际使用中,它常常被称为co原创 2022-03-16 20:56:00 · 14002 阅读 · 0 评论 -
「解析」正则化 DropPath
DropPath 类似于Dropout,不同的是 Drop将深度学习模型中的多分支结构随机 "失效"而Dropout 是对神经元随机 "失效"1、DropPath在网络中的应用假设在前向传播中有如下的代码:x = x + self.drop_path( self.conv(x) )那么在drop_path分支中,每个batch有drop_prob的概率样本在 self.conv(x) 不会 “执行”,会以0直接传递。若x为输入的张量,其通道为[B,C,H,W],那么drop_path的含义原创 2022-02-15 21:49:52 · 8934 阅读 · 0 评论 -
【详解】Transfer learning迁移学习 附代码
迁移学习的训练策略:1、先冻结卷积层只训练全链接层,这一步需要把结果最好的那个模型保存起来。2、加载上一步保存的那个最优模型,在这个模型的基础上,再以更小的学习率训练所有层,更新网络的所有权重参数,微调,并且学习率衰减,以达到更好的效果。 当自己的数据集少的时候,可以除了最后几层用作初始化,前面层的权值进行微调,一般不进行大的更改,冻住参数;当自己的数据集中的时候,只冻住前面 1/2 层的参数,后面的只做初始化;原创 2021-10-01 23:40:01 · 2618 阅读 · 0 评论 -
nn.Softmax 系列小结
nn.Softmin; torch.nn.Softmin(dim=None); Applies the Softmin function to an n-dimensional input Tensor rescaling them so that the elements of the n-dimensional output Tensor lie in the range [0, 1] and sum to 1.nn.Softmax; Applies the Softmax function to原创 2021-09-23 23:03:33 · 1161 阅读 · 0 评论 -
解析 torch.topk()
在作分类算法时,时常见到 @acc1 和 @acc5 的情况,@acc1 比较容易实现,但是一直苦于 @acc5 算法的实现,在此为大家提供一种 @topk 的实现方法torch.topk()原创 2021-09-15 10:36:46 · 1177 阅读 · 0 评论 -
Pytorch 常用编码格式
如果PIL图像属于(L,LA,P,I,F,RGB,YCbCr,RGBA,CMYK,1)模式之一,则将[0,255]范围内的PIL图像或 np.ndarray (np.uint8) (HxWxC)转换为 [0.0,1.0] 范围内的浮点张量 (CxHxW)可选地将图像转换为所需的格式。对于 Pytorch 而言,与图像相关的项目,所有的图像读取都是以 [b、c、h、w]格式进行读取操作。image.shape 得到的图像维度:(B,H,W,C),且通道数是:(B、G、R)Pytorch中比较常用。原创 2021-08-17 22:05:00 · 1118 阅读 · 1 评论 -
详解 1x1 卷积核
表面看来,1x1 卷积核似乎并不是真正的滤波器,它只是将图像的每个点都乘以 1 个权重,再加上 1个偏置;因此,通过 N个 1x1 卷积核,只需少量参数,就能将 M张图像变为 N张图像;应用场景如需将图像分为 N类,可在最后用 1x1 卷积层 将 M张图像转换为 N张图像,在通过全局池化变为 N个数字,送入 Softmax计算输出;可用 1x1 卷积层作为 瓶颈层。假设输入通道是 256个,要求经过 3x3卷积,最后输出通道也是 256个,那么有 2种实现方式:直接送入3x3 卷积层,原创 2020-11-17 13:33:34 · 2421 阅读 · 0 评论 -
Pytorch 自定义算子
自定义激活函数算子 Pytorch 自定义激活函数,都需要继承torch.autograd.Function 类,其内部需要定义两个静态方法【@staticmethod】:forward & 1.forward方法:定义了输入张量(可以是多个),返回对应的输出(也可以是多个张量);2. backward方法:定义了输出的剃度张量(可以是多个,必须和输出张量一一对应),返回输入张量(可以是多个,必须喝输入张量一一对应)【之所以一一对应,是因为计算图中的每个张量在方向传播的时候,输出张量和输入张量对应原创 2021-08-13 20:09:05 · 2107 阅读 · 0 评论 -
Pytorch Tensor 的创建&操作
1、张量的创建 1.1 通过 torch.tensor 函数创建张量 通过 torch.tensor 不仅可以创建指定的张量,还可以用来进行转换。如果有预先的数据(list、ndarray),可以通过这个方法来进行转换。在 torch.tensor 函数中,可以通过传入 dtype参数来指定生成的张量的数据类型,函数内部会自动做数据类型的转换原创 2020-08-21 21:09:56 · 2920 阅读 · 0 评论 -
GeForce RTX™ 2070 MINI ITX 8G
产品特色最大数字分辨率 : 7680x4320 @60Hz采用 GeForce RTX™ 2070 显示核心长度仅17cm,轻松兼容多种ITX平台搭载 8GB GDDR6 256Bit超快显存 9cm大风扇搭配特殊刀刃式风扇强化合金背板,加固显卡2304 个 CUDA® Cores 42个 RTX-OPS 计算能力 7.5原创 2020-02-21 17:26:33 · 1656 阅读 · 2 评论 -
「详解」torch.nn.Fold和torch.nn.Unfold操作
torch.nn.Unfold 提取滑动窗口patches torch.nn.Unfold(kernel_size, dilation=1, padding=0, stride=1) kernel_size:滑动窗口的size stride:空间维度上滑动的步长,Default: 1 padding:在输入的两侧添加的隐式零填充. Default: 0 dilation:空洞卷积的扩充率,Default: 1torch.nn.Unfold按照官方的说法,既从一个batch的样本中,提取出滑动的局部区域块,原创 2021-08-27 23:00:01 · 19976 阅读 · 38 评论 -
【解析】TensorBoard 可视化
在深度学习之中,可视化是必不可少的关键一步,虽然很多时候可以将需要的信息在输出窗口打印出来,但是能表达的信息是在太少,比如 loss趋势图、acc趋势图、权重分布图等等,都难以描述出来;Tensorboard 本是为了 Tensorflow而设计的一款可视化工具,后期 Pytorch 也引入支持,极大的小伙伴们的学习难度,虽然也有其他可视化工具支持,但是 Tensorboard可以直接迁移过来使用,上手还是更快。原创 2021-04-29 23:24:25 · 2188 阅读 · 0 评论 -
【图文】Pytorch 学习率调整策略
梯度下降:w i+1 =w I−lr⋅g(w i) 所有的学习率继承于 class _LRScheduler类属性:optimizer:关联的优化器 last_epoch:记录epoch 数据 base_lrs:记录初始化学习率 方法:step():更新下一个epoch 的学习率 get_lr():计算下一个epoch的学习率【虚函数】初始化学习率 设置较小数:0.01 optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last原创 2021-08-14 21:17:29 · 658 阅读 · 0 评论 -
【细聊】Pytorch 里面的 Tensor/Parameter/Variable/Buffer
Parameters(参数) 是 Tensor 的Variable的一种,常被用于模块参数(module parameter)。Parameters(参数) 是 Variable 的子类。Paramenters和Modules一起使用的时候会有一些特殊的属性,即:当Paramenters赋值给Module的属性的时候,他会自动的被加到 Module的 参数列表中(即:会出现在 parameters() 迭代器中)。将Varibale赋值给Module属性则不会有这样的影响。原创 2021-08-14 20:35:29 · 1717 阅读 · 1 评论 -
「细聊」torch.nn.init 初始化
init.uniform从均匀分布 \mathcal{U}(a, b)中生成值,填充输入的张量或变量 Parameters:tensor - n维的torch.Tensor a - 均匀分布的下界 b - 均匀分布的上界 nn.init.normal 从给定均值和标准差的**正态分布** $\mathcal{N}(mean, std)$中生成值,填充输入的张量或变量 Parameters: tensor – n维的torch.Tensor mean – 正态分布的均值 std nn.init.constan原创 2021-08-11 23:47:00 · 9933 阅读 · 3 评论 -
搭建一台学习主机 乔思伯U1-Plus
前言: 这是一篇记录自己组装台式机的博文,同时也分享给大家,帮助大家躲避一些不必要的坑!> 由于这是博主第一次自己组装电脑,算不上经验丰富,所以有不足之处还望大家海涵,也欢迎大家留言交流。 主要查看 :那些年踩过的坑!先上图 下面这张照片就是当时深深吸引了我,小巧mini 、极简的装饰,又恋爱了!原创 2020-04-04 04:04:28 · 1681 阅读 · 1 评论 -
【附代码】图像分类 — 测评指标
在深度学习中,对模型的测量和评估至关重要,只有选择与问题相匹配的评估方法,才能够快速地发现在模型选择和训练过程中可能出现的问题,从而迭代地对模型进行优化。图像分类是计算机视觉中最基础的一个任务,它的目标是将不同的图像划分到不同的类别,实现最小的分类误差,这里我们只考虑单标签分类问题,即每一幅图像都只有唯一的类别。对于单标签分类任务,其评价指标主要有:1、准确率2、精确率3、召回率4、F1-score5、混淆矩阵6、ROC曲线7、AUC原创 2021-05-21 20:51:19 · 8082 阅读 · 11 评论 -
Pytorch 读取自定义数据集
本文将涉及以下几个方面:自定义数据集基础方法使用 Torchvision Transforms换一种方法使用 Torchvision Transforms结合 Pandas 读取 csv 文件结合 Pandas 使用__getitem__()使用 Dataloader 读取自定义数据集自定义数据集基础方法首先要创建一个 Dataset 类:from torch.utils.data.dataset import Dataset class MyCustomDataset(Data原创 2020-12-04 21:02:01 · 1965 阅读 · 0 评论 -
PyTorch 大批量数据 如何训练?
在深度学习训练中,我们经常遇到 GPU 的内存太小的问题,如果我们的数据量比较大,别说大批量(large batch size)训练了,有时候甚至连一个训练样本都放不下。但是随机梯度下降(SGD)中,如果能使用更大的 Batch Size 训练,一般能得到更好的结果。那么问题来了:当 GPU 的内存不够时,如何使用大批量(large batch size)样本来训练神经网络呢?这篇文章将以 PyTorch 为例,讲解一下几点:当 GPU 的内存小于 Batch Size 的训练样本,或者甚至连一原创 2020-06-16 14:16:27 · 5531 阅读 · 2 评论 -
Pytorch 构建数据集&数据加载
DataLoader :将自定义的Dataset根据batch size大小、是否shuffle等封装成一个Batch Size大小的Tensor,用于后面的训练。DataLoader(dataset , batch_size=1 , shuffle=False , sampler=None , batch_sampler=None , num_workers=0 , collate_fn=None , pin_memory=False , d原创 2020-11-28 16:59:57 · 1010 阅读 · 0 评论 -
Pytorch 公开数据集
为了方便深度学习模型的研究,网络有很多公开的数据集可供下载;对于特殊任务的深度学习任务,如果需要,则可以自行收集 & 标注数据集;根据数据集的大小,可以分为:小型数据集、重型数据集 & 大型数据集1、小型数据集 (MNIST、CIFAR – 图像分类)小型数据集在 100MB以内,一般数据量在 10410^4104 张图片以内;对于小型数据集,代表的有 MNIST、CIFAR数据集,这两个数据集都是分类任务的数据集;MNIST是手写数字数据集,所有的图像都是 28x28 大小的黑白原创 2020-11-28 15:00:01 · 1418 阅读 · 0 评论 -
Pytorch 常用损失函数
基本用法:criterion = LossCriterion() # 构造函数有自己的参数loss = criterion(x, y) # 调用标准时也有参数计算出来的结果已经对mini-batch取了平均分类和回归的区别:在于输出变量的类型。定量输出称为回归,或者说是连续变量预测;定性输出称为分类,或者说是离散变量预测。分类问题1、class torch.nn.L1Loss(size_average=True)创建一个衡量输入x(模型预测输出) 和 目标y之间差的绝原创 2020-11-26 19:35:35 · 2808 阅读 · 0 评论 -
Pytorch 常用 optimizer
torch.optim 是一个实现了各种优化算法的库。大部分常用的方法得到支持,并且接口具备足够的通用性,使得未来能够集成更加复杂的方法。为了使用torch.optim,你需要构建一个optimizer对象。这个对象能够保持当前参数状态并基于计算得到的梯度进行参数更新。构建 为了构建一个Optimizer,你需要给它一个包含了需要优化的参数(必须都是Variable对象)的iterable。然后,你可以设置optimizer的参 数选项,比如学习率,权重衰减,等等。原创 2020-11-25 21:45:08 · 2162 阅读 · 0 评论 -
详解 Pytorch.random
以下torch 方法默认返回的是 CPU torch.Generator. 除了以下常用 torch方法以外, 还可以通过 torch.from_numpy(array) 将 Numpy的数组转换为torch张量;1、torch.rand() 返回区间 [ 0,1) 上均匀分布的随机数填充的张量。张量的形状由变量的参数大小定义。Parameters: - size (int...) 定义输出张量形状的整数序列;可以是可变数量的参数,也可以是像List或tuple这样的集合。原创 2020-11-25 09:55:00 · 11977 阅读 · 2 评论 -
详解 torch.max 函数
torch.max()返回输入张量所有元素的最大值。参数:input (Tensor) – 输入张量例子:>>> a = torch.randn(1, 3)>>> a 0.4729 -0.2266 -0.2085[torch.FloatTensor of size 1x3]>>> torch.max(a)0.4729torch.max(input, dim, max=None, max_indices=None) -&原创 2020-10-03 13:20:10 · 38087 阅读 · 0 评论 -
详解 Pytorch 实现 MNIST
MNIST虽然很简单,但是值得我们学习的东西还是有很多的。项目虽然简单,但是个人建议还是将各个模块分开创建,特别是对于新人而言,模块化的创建会让读者更加清晰、易懂。CNN模块:卷积神经网络的组成;train模块:利用CNN模型 对 MNIST数据集 进行训练并保存模型test模块:加载训练好的模型对测试集数据进行测试cnn.pt : train 的CNN模型注意!有GPU的小伙伴尽量使用GPU训练,GPU的训练速度比CPU的训练速度高许多倍,可以节约大量训练时间CNN 模块MN原创 2020-07-11 02:14:58 · 10293 阅读 · 12 评论 -
Pytorch模型 保存&加载
keras中常使用 .h5 文件保存模型。而 Pytorch 保存数据的格式为.t7文件 或者 .pt文件 或者 .pkl格式 .t7格式 是沿用 torch7 中读取模型权重的方式 .pt格式 是Pytorch官方示例推荐使用的格式原创 2020-06-29 19:00:15 · 10079 阅读 · 0 评论 -
Pytorch & Numpy 对照表
这是一份面向 Numpy 用户的 PyTorch 入坑指南,如果你之前对 Numpy 使用得心应手,那么有了下面这份指南,你一定可以快速了解 PyTorch 里对应的数值类型以及运算等知识。类型(Types)NumpyPyTorchnp.ndarraytorch.Tensornp.float32torch.float32; torch.floatnp.float64torch.float64; torch.doublenp.float16torch.原创 2020-06-19 23:26:41 · 17368 阅读 · 1 评论