pytorch
文章平均质量分 79
CVer儿
开源让世界更美好
展开
-
warm-up结合CosineAnnealingLR
在实际应用中,你可以根据具体情况合理设置这两个阶段的学习率,使得模型训练能够更好地收敛和达到较高的性能。一般来说,warm-up 阶段的学习率可以设置相对较低,以帮助模型在初始阶段更稳定地学习参数;而余弦退火阶段的最大学习率可以设置较高,以在训练后期更好地优化模型。在结合 warm-up 和余弦退火调度器时,warm-up 阶段的初始学习率和余弦退火调度器的最大学习率不一定需要相同。通常情况下,这两者的学习率可以不同。原创 2024-05-07 19:01:41 · 469 阅读 · 0 评论 -
pix2pix-gan医疗图像分割迁移
做pix2pix-gan的实验,数据包含两个部分mr 和 ct,不需要标签,因此上面的 def getitem(self, index):中不需要index这个参数了,类似地,根据需要,加入自己的参数,去掉不需要的参数。pix2pix-gan做医学图像合成的时候,如果把nii数据转成png格式会损失很多信息,以为png格式图像的灰度值有256阶,因此直接使用nii的医学图像做输入会更好一点。在自己构建数据层时都要基于这个类,类似于C++中的虚基类。自己构建的数据层包含三个部分。原创 2023-07-10 16:32:02 · 724 阅读 · 0 评论 -
分布式 | torch的主流做法
Pytorch 分布式训练主要有两种方式:torch.nn.DataParallel ==> 简称 DPtorch.nn.parallel.DistributedDataParallel ==> 简称DDP本文结合源码了解下Pytorch的这两个方法,本文主要记录DP和DDP的使用方式。DP 只用于单机多卡,DDP 可以用于单机多卡也可用于多机多卡,DP写法比较简单,但即使在单机多卡情况下也比 DDP 慢。转载 2022-09-13 10:18:27 · 710 阅读 · 0 评论 -
torch单机多卡和多机多卡训练
数据加载部分我们在该教程的第一篇里介绍过,主要时通过torch.utils.data.distributed.DistributedSampler来获取每个gpu上的数据索引,每个gpu根据索引加载对应的数据,组合成一个batch,与此同时Dataloader里的shuffle必须设置为None。多机多卡训练的一般有两种实现方式,一种是上面这个DDP方式,这里我们就不再介绍了,另一种是使用一个额外的库horovod。上面DP是比较简单的单机多卡的实现方式,但DDP是更高效的方式,不过实现要多几行代码。...转载 2022-08-02 13:39:19 · 4661 阅读 · 1 评论 -
f.grid_sample
代码】f.grid_sample。原创 2022-07-25 00:26:54 · 3865 阅读 · 0 评论 -
Torch代码模板
即使PyTorch已经有很多标准的损失函数,有时也需要创建自己的损失函数。为此,需要创建一个单独的文件。转载 2022-07-15 13:29:20 · 554 阅读 · 0 评论 -
Torch 常用 Tricks 总结
1. 指定GPU编号设置当前使用的GPU设备仅为0号设备,设备名称为 :设置当前使用的GPU设备为0, 1号两个设备,名称依次为 、: ,根据顺序表示优先使用0号设备,然后使用1号设备。指定GPU的命令需要放在和神经网络相关的一系列操作的前面。2. 查看模型每层输出详情Keras有一个简洁的API来查看模型的每一层输出尺寸,这在调试网络时非常有用。现在在PyTorch中也可以实现这个功能。使用很简单,如下用法: 是根据你自己的网络模型的输入尺寸进行设置。https://github.com/sk转载 2022-07-13 10:25:56 · 272 阅读 · 0 评论 -
浮点计算量和参数量的计算
不同的网络算子有不同的计算量,其计算方式也不相同。在卷积神经网络中,主要以卷积层和全连接层为主,其他算子的操作一般比较小,可以忽略不计,算作误差。二者其计算量的计算方式如下: 表示卷积核大小, 和 表示输入和输出通道数, 和 表示输出特征图大小。 计算代码--以PyTorch框架为例第一个推荐的计算库是 thop, 简单好用① 安装:推荐从作者的github直接安装最新版本。② 使用:第二个推荐微软的nni包nni中有个计算网络模型计算量和参数量的小工具,使用起来也非常简单,并能输原创 2022-07-12 10:03:08 · 1374 阅读 · 0 评论 -
torch DDP Training
01有三种分布式训练模型被拆分到不同GPU, 模型太大了,基本用不到模型放在一个,数据拆分不同GPU,torch.dataparallel基本不会报bugsync bc要自己准备模型和数据在不同gpu上各有一份, torch.distributeddataparallelbug多,各进程间数据不共享,访问文件先后不确定,在日志系统,数据集预处理,模型loss放在指定cuda等地方要仔细设计。sync 是pytorch现有的库原理和效果理论上和 2 一致,都是用更大的batchsize,速度确实比 2 快,好转载 2022-06-18 17:11:10 · 271 阅读 · 0 评论 -
轻量级CNN设计技巧
这篇文章将从一个证件检测网络(Retinanet)的轻量化谈起,简洁地介绍,我在实操中使用到的设计原则和idea,并贴出相关的参考资料和成果供读者参考。因此本文是一篇注重工程性、总结个人观点的文章,存在不恰当的地方,请读者在评论区指出,方便交流。目前已有的轻量网络有:MobileNet V2和ShuffleNet v2为代表。在实际业务中,Retinanet仅需要检测证件,不涉及过多的类别物体的定位和分类,因此,我认为仅仅更换上述两个骨架网络来优化模型的性能是不够的,需要针对证件检测任务,专门设计一个更加轻转载 2022-06-18 16:31:19 · 678 阅读 · 0 评论 -
torch DDP模式并行
torch.nn.DataParallel只需要一行代码就可以实现DataParallel:DataParallel方法虽然代码非常简单,但是GPU会出现负载不均衡的问题("一个gpu干活,其它gpu看戏")。第一个GPU(12GB)可能占用了10GB,剩余的GPU却只使用了2GB -- 这是极大的浪费。那么,为什么会出现这样的现象呢?我们来仔细研究一下下面这个流程图就明白了:我们首先需要指定一个GPU(0)作为master GPU,它必须承担最多的负载。第一步:GPU(0)从锁页内存(分配主机内存时转载 2022-06-14 17:04:14 · 1847 阅读 · 1 评论 -
torch损失函数汇总
weight (Tensor, optional) – 自定义的每个 batch 元素的 loss 的权重. 必须是一个长度为 “nbatch” 的 的 Tensor。weight (Tensor, optional) – 自定义的每个 batch 元素的 loss 的权重. 必须是一个长度 为 “nbatch” 的 Tensor。mean:返回loss和的平均值;weight (Tensor, optional) – 自定义的每个类别的权重. 必须是一个长度为 C 的 Tensor。转载 2022-06-06 13:39:06 · 3053 阅读 · 0 评论 -
框架中分布式训练
作者 | 杨阳整理 | NewBeeNLP在深度学习时代,训练数据特别大的时候想要单卡完成训练基本是不可能的。所以就需要进行分布式深度学习。在此总结下个人近期的研究成果,欢迎大佬指正。转载 2022-06-06 13:33:36 · 1323 阅读 · 0 评论 -
torch|全局池化层详解
但是GAP是另外方式避免全连接层的处理,直接通过全局池化+softmax进行分类,它的优点是更加符合卷积层最后的处理,另外一个优点是GAP不会产生额外的参数,相比全连接层的处理方式,降低整个计算量,此外全局池化还部分保留来输入图像的空间结构信息,所以全局池化在有些时候会是一个特别有用的选择。全局均值池化跟全局最大池化的输入一般为NxCxHxW,输出为NxCx1x1但是实际上有时候我们还会有另外一个需求,就是全局深度池化,它的输出是Nx1xHxW。可以看到全局池化会根据需要产生神经元,神经元个数可控,可调。转载 2022-06-01 13:20:11 · 3045 阅读 · 0 评论 -
7个提升Torch性能的技巧
在过去的10个月里,在PyTorch Lightning工作期间,团队和我已经接触过许多结构PyTorch代码的风格,我们已经发现了一些人们无意中引入瓶颈的关键地方。我们非常小心地确保PyTorch Lightning不会对我们为你自动编写的代码犯任何这些错误,我们甚至会在检测到这些错误时为用户纠正这些错误。然而,由于Lightning只是结构化的PyTorch,而你仍然控制所有的PyTorch,因此在许多情况下,我们不能为用户做太多事情。此外,如果不使用Lightning,可能会在...翻译 2022-05-31 10:18:36 · 945 阅读 · 0 评论 -
pytorch的2/3D仿射变换
此文有误,正在研究解决方案。pytorch理论上支持,也确实提供了API,但是经过我的研究发现,pytorch3D的仿射变换目前存在bug,bug主要体现在平移操作上,旋转和缩放暂时看起来还算正常最近要用3D的仿射变换,发现网上例子基本上是2D的,也没有针对3D的资料,特此整理一个。首先说一下啥是仿射变换,简单说仿射变换就是对图像进行平移,旋转,缩放等操作。像这两个图像就是做了一个旋转的变换。2D的仿射变换我就不细说了,网上太多了,铺天盖地,在pytorch中的操作可以参考这..转载 2022-05-16 21:16:15 · 1443 阅读 · 0 评论 -
torch - 弹性训练极简实现ddp
原文:实操教程|Pytorch - 弹性训练极简实现( 附源码)作者将以往抽象的分布式训练的概念以代码的形式展现出来,并保证每个代码可执行、可验证、可复现,并贡献出来源码让大家相互交流。本例中会先在Node0上启动4 GPU的worker group ,等其训练一段时间后,会在Node1上再启动4 GPU的workers,并与Node1上的workers构成一个新的worker group,最终构成一个2机8卡的分布式训练。>>由于工作需要,最近在补充分布式训练方面的知识。经过一番理论学转载 2022-05-10 14:13:27 · 2052 阅读 · 1 评论 -
5 种 PyTorch 并行训练方法(单机多卡)
笔者使用 PyTorch 编写了不同加速库在 ImageNet 上的使用示例(单机多卡),需要的同学可以当作 quickstart 将需要的部分 copy 到自己的项目中(Github 请点击下面链接):1、简单方便的nn.DataParallelhttps://github.com/tczhangzhi/pytorch-distributed/blob/master/dataparallel.py2、使用torch.distributed加速并行训练https://github.co...转载 2022-03-11 16:29:23 · 1341 阅读 · 0 评论 -
pytorch torch.nn 实现上采样——nn.Upsample
原帖1)UpsampleCLASS torch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align_corners=None)上采样一个给定的多通道的1D (temporal,如向量数据), 2D (spatial,如jpg、png等图像数据) or 3D (volumetric,如点云数据)数据假设输入数据的格式为minibatch x channels x [optional depth] x [option..转载 2022-02-23 18:09:58 · 4494 阅读 · 0 评论 -
Torch Cookbook
本文代码基于PyTorch 1.0版本,需要用到以下包import collectionsimport osimport shutilimport tqdmimport numpy as npimport PIL.Imageimport torchimport torchvision1. 基础配置检查PyTorch版本torch.__version__ # PyTorch versiontorch.version.cuda转载 2022-02-11 17:34:20 · 149 阅读 · 0 评论 -
torch2onnx
问题一:ONNX export failure: Exporting the operator silu to ONNX opset version 12 is not supported. Please open a bug to request ONNX export support for the missing operator.参考link修改silu实现class SiLU(Module): __constants__ = ['inplace'] inplac.原创 2022-01-11 17:20:08 · 1812 阅读 · 0 评论 -
Torch优化训练的17种方法
本文介绍在使用 PyTorch 训练深度模型时最省力、最有效的 17 种方法。该文所提方法,都是假设你在 GPU 环境下训练模型。具体内容如下。01考虑换一种学习率 schedule学习率 schedule 的选择对模型的收敛速度和泛化能力有很大的影响。Leslie N. Smith 等人在论文《Cyclical Learning Rates for Training Neural Networks》、《Super-Convergence: Very Fast Training of Neu转载 2021-12-30 09:57:29 · 1895 阅读 · 0 评论 -
torch优化器与学习率设置
学习率设置对于学习过程来说相当重要。学习率过低会导致学习速度太慢,学习率过高又容易导致难以收敛。在很多学习过程中,都会采用动态调整学习率的方法。刚开始训练的时候,学习率设置大一点,以加快学习速度;之后逐渐减小学习率,来寻找最优解。那么在Pytorch中,如在训练过程中动态地调整学习率呢?目录 优化器Optimizer 只训练模型的一部分参数 不同部分的参数设置不同的学习率(以及其他属性) Optimizer基本属性 optimizer基原创 2021-12-29 10:12:25 · 5192 阅读 · 1 评论 -
torch | 提取参数及自定义初始化
pytorch实践中,有时提取出的层结构并不够,还需要对里面的参数进行初始化,那么如何提取出网络的参数并对其初始化呢?有时候提取出的层结构并不够,还需要对里面的参数进行初始化,那么如何提取出网络的参数并对其初始化呢?首先 nn.Module 里面有两个特别重要的关于参数的属性,分别是 named_parameters()和 parameters()。named_parameters() 是给出网络层的名字和参数的迭代器,parameters()会给出一个网络的全部参数的选代器。importo.原创 2021-12-27 13:50:15 · 1253 阅读 · 0 评论 -
torch节省内存(显存)的小技巧
在用pytorch实现一个tensorflow project的时候遇到了GPU显存超出 (out of memory) 的问题,不知道有什么优化方法。高质量回答Lyken愿以有涯随无涯https://www.zhihu.com/question/274635237/answer/755102181咦,大家都没看过陈天奇的 Training Deep Nets with Sublinear Memory Cost (https://arxiv.org/abs/1604.061..转载 2021-12-27 10:46:06 · 2563 阅读 · 0 评论 -
【无标题】
1. 基本配置导入包和版本查询 import torchimport torch.nn as nnimport torchvisionprint(torch.__version__)print(torch.version.cuda)print(torch.backends.cudnn.version())print(torch.cuda.get_device_name(0))可复现性在硬件设备(CPU、GPU)不同时,完全的可复现性无法保证,即使随机种子相同。但是,转载 2021-12-17 10:15:00 · 357 阅读 · 0 评论 -
数据预处理与模型训练技巧
计算机视觉主要问题有图像分类、目标检测和图像分割等。针对图像分类任务,提升准确率的方法路线有两条,一个是模型的修改,另一个是各种数据处理和训练的技巧(tricks)。图像分类中的各种技巧对于目标检测、图像分割等任务也有很好的作用,因此值得好好总结。本文在精读论文的基础上,总结了图像分类任务的各种tricks如下: Warmup Linear scaling learning rate Label-smoothing Random image cropping and pa转载 2021-12-17 09:45:52 · 1317 阅读 · 0 评论 -
实践教程 | 浅谈 PyTorch 中的 tensor 及使用
本文围绕 PyTorch 中的 tensor 展开,讨论了张量的求导机制,在不同设备之间的转换,神经网络中权重的更新等内容。受众是使用过 PyTorch 一段时间的用户。>>加入极市CV技术交流群,走在计算机视觉的最前沿本文主要围绕 PyTorch 中的 tensor 展开,讨论了张量的求导机制,在不同设备之间的转换,神经网络中权重的更新等内容。受众群是使用过 PyTorch 一段时间的用户。本文中的代码例子基于 Python 3 和 PyTorch 1.1,如果文章中有错误或者没有说.转载 2021-12-16 10:53:15 · 982 阅读 · 0 评论 -
实践教程|Torch加速
由于最近的程序对速度要求比较高,想要快速出结果,因此特地学习了一下混合精度运算和并行化操作,由于已经有很多的文章介绍相关的原理,因此本篇只讲述如何应用torch实现混合精度运算、数据并行和分布式运算,不具体介绍原理。混合精度自动混合精度训练(auto Mixed Precision,AMP)可以大幅度降低训练的成本并提高训练的速度。在此之前,自动混合精度运算是使用NVIDIA开发的Apex工具。从PyTorch1.6.0开始,PyTorch已经自带了AMP模块,因此接下来主要对PyTorch自带的a转载 2021-11-16 10:20:41 · 1912 阅读 · 0 评论 -
GPU 多卡并行训练总结(以 pytorch 为例)
01 为什么要使用多GPU并行训练简单来说,有两种原因:第一种是模型在一块GPU上放不下,两块或多块GPU上就能运行完整的模型(如早期的AlexNet)。第二种是多块GPU并行计算可以达到加速训练的效果。想要成为“炼丹大师“,多GPU并行训练是不可或缺的技能。02 常见的多GPU训练方法1.模型并行方式:如果模型特别大,GPU显存不够,无法将一个显存放在GPU上,需要把网络的不同模块放在不同GPU上,这样可以训练比较大的网络。(下图左半部分)2.数据并行方式:将整个模型放在一转载 2021-09-27 18:51:30 · 3256 阅读 · 2 评论 -
(附代码)经验 | 深度学习torch训练代码模板
从参数定义,到网络模型定义,再到训练步骤,验证步骤,测试步骤,总结了一套较为直观的模板。目录如下:1. 导入包以及设置随机种子2. 以类的方式定义超参数3. 定义自己的模型4. 定义早停类(此步骤可以省略)5. 定义自己的数据集Dataset,DataLoader6. 实例化模型,设置loss,优化器等7. 开始训练以及调整lr8. 绘图9. 预测01 导入包以及设置随机种子import numpy as npimport torchimport tor转载 2021-09-18 09:55:10 · 1886 阅读 · 0 评论 -
深度学习pytorch训练代码模板(个人习惯)
目录如下: 导入包以及设置随机种子 以类的方式定义超参数 定义自己的模型 定义早停类(此步骤可以省略) 定义自己的数据集Dataset,DataLoader 实例化模型,设置loss,优化器等 开始训练以及调整lr 绘图 预测 一、导入包以及设置随机种子import numpy as npimport torchimport torch.nn as nnimport numpy as npimport p转载 2021-08-20 11:09:17 · 688 阅读 · 0 评论 -
torch_cos退火
optimizer = optim.SGD(net.parameters(),lr = lr,momentum=0.9,weight_decay=1e-4) scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer,T_max = (epochs // 19) + 1) # scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=(epochs // ..原创 2021-07-23 10:22:33 · 326 阅读 · 0 评论 -
torch中的损失函数大全
keras和pytorch很多都是相似的,这里以pytorch为例。1. L1范数损失 L1Loss计算 output 和 target 之差的绝对值。torch.nn.L1Loss(reduction='mean')参数:reduction-三个值,none: 不使用约简;mean:返回loss和的平均值;sum:返回loss的和。默认:mean。2 均方误差损失 MSELoss计算 output 和 target 之差的均方差。torch.nn.MSELoss(转载 2021-07-17 10:30:47 · 4079 阅读 · 0 评论 -
torch常用train和val训练过程记录
best_dice = 0 for epoch in range(1, EPOCHES+1): start_time = time.time() model.train() train_loss = train(model, train_loader, loss_fn, optimizer) val_dice = validation(model, val_loader, loss_fn,0.5) l...原创 2021-06-30 11:04:26 · 2289 阅读 · 0 评论 -
PyTorch 常用代码段汇总
本次实验的代码大家可以到下面的 GitHub仓库 链接中进行下载与学习。Github:https://github.com/CVHuber/Pytorch_common_code张量处理张量基本信息tensor = torch.randn(3,4,5)print(tensor.type()) # 数据类型print(tensor.size()) # 张量大小print(tensor.dim()) # 维度的数量张量命名NCHW = [‘N’, ‘C’, ‘H’,转载 2021-06-15 10:41:22 · 471 阅读 · 0 评论 -
用PyTorch重新创建Keras API
Francois Chollet写的《Deep Learning with Python》一书让我进入了深度学习的世界。从那时起我就爱上了Keras的风格。Keras是我的第一个框架,然后是Tensorflow,接着进入PyTorch。老实说,在Keras的模型训练中,我很兴奋这个进度条,真是太棒了。那么,为什么不尝试把Keras训练模型的经验带到PyTorch呢?这个问题让我开始了工作,最后我用所有那些花哨的进度条重现了Keras的Dense层、卷积层和平坦层。模型可以通过堆叠一层转载 2020-10-20 01:45:49 · 316 阅读 · 0 评论 -
pth模型转为onnx
pytorch保存的模型通常为pth、pt、pkl的格式,通常部署需要转成对应的格式如onnx;API说明和解释:参考:https://blog.csdn.net/CFH1021/article/details/105359587export(model, args, f, export_params=True, verbose=False, training=False, input_names=None, output_names=None, aten=False, e.原创 2020-10-12 16:19:25 · 3938 阅读 · 1 评论 -
pytorch的4种学习率衰减策略
作者丨机器学习入坑者@知乎(已授权)来源丨https://zhuanlan.zhihu.com/p/93624972编辑丨极市平台极市导读本文介绍了四种衰减类型:指数衰减、固定步长的衰减、多步长衰、余弦退火衰减并逐一介绍其性质,及pytorch对应的使用方式。>>本周六(5月8日)早上8:50,广东省CVPR 2021论文预交流在线学术报告,点击获取直播链接梯度下降算法需要我们指定一个学习率作为权重更新步幅的控制因子,常用的学习率有0.01、0.001以及0.0001..转载 2021-05-08 10:10:31 · 4686 阅读 · 0 评论 -
三大视觉任务的loss
机器学习算法的设计使其可以从错误中“学习”并使用我们提供给他们的训练数据来“更新”自己。但是他们如何量化这些错误呢?这是通过使用“损失函数”来完成的,该函数可以帮助算法了解与基本事实相比,其预测的错误程度。选择合适的损失函数很重要,因为它会影响算法尽快生成最佳结果的能力。01基本的损失函数:1.1 L2 LOSS 这是可用的最基本的损失,也称为MSE Loss。这依赖于两个向量[预测和真实标签]之间的Euclidean距离。 L2 Loss 对异常值非常敏感,...转载 2021-05-06 14:38:54 · 3512 阅读 · 2 评论