Pytorch
咆哮的阿杰
吾生也有涯,而知也无涯
展开
-
pytorch多进程处理数据的代码模板
【代码】pytorch多进程处理数据的代码模板。原创 2023-08-29 15:49:43 · 326 阅读 · 0 评论 -
PyTorch多进程分布式训练最简单最好用的实施办法
PyTorch的distributed训练已经逐渐代替nn.Dataparallel的方式,因为官方对其有更好的支持,并且训练速度更快。大家可能知道一种启动方法,就是用torch.launch启动。但有没有被冗长的代码段惹的不开心呢。今天阿杰为大家带来一种更简单的启动方式,那就是torch.multiprocessingNote: torch.multiprocessing的启动和用torch.launch本质是一样的,就是单纯的代码量少。使用方法使用头文件import torch.multipro原创 2020-12-03 22:04:35 · 13277 阅读 · 3 评论 -
Pytorch 多进程在单卡上测试
有些炼丹师可能机器不足,只有一张卡,然后训练完成了,想要测试的时候,受限于图像样本size不一致,不能合并到一个batch中。当然解决方案很多,但有一种更自然的办法,既使用任意分辨率的输入,同样使用多进程在单卡上并行执行数据的测试,从而加快测试速度,赶上dideline。大家都知道Pytorch官方推广大家使用分布式多卡并行计算,其原理是每个进程都使用一个GPU。那我们现在要做的就是多进程都在一个GPU上,每个进程处理一批数据,从而加快处理速度。前言模型在GPU上,Pytorch规定:多进程的启动原创 2020-11-28 16:26:31 · 7277 阅读 · 6 评论 -
PyTorch中Affine grid和grid sample这两个兄弟函数的用法
前言Affie Grid能用来实现ROI Pooling操作,在RCNN网络和STN(spatial transformation network)中常被用到。除了这些,他还有一个作用就是用来做仿射变换(affine transform)。关于仿射变化,可以参考我的另一篇博客 仿射变换的基本原理还有一点,affine grid基本上是和grid sample混用的。最后需要说明的是,affine grid和grid sample这两个兄弟函数,很像opencv中的一对函数:getRotationMa原创 2020-11-26 15:00:29 · 7926 阅读 · 5 评论 -
PyTorch中grid_sample的使用方法
grid_sample底层是应用双线性插值,把输入的tensor转换为指定大小。那它和interpolate有啥区别呢?interpolate是规则采样(uniform),但是grid_sample的转换方式,内部采点的方式并不是规则的,是一种更为灵活的方式。torch.nn.functional.grid_sample(input, grid, mode=‘bilinear’, padding_mode=‘zeros’)input : 输入tensor, shape为 [N, C, H_in,原创 2020-07-24 13:40:55 · 54231 阅读 · 19 评论 -
COCO API的安装,COCO数据集介绍以及读取接口代码解读(PyTorch接口)
COCO(Common Objects in Context)数据集是微软发布的大型数据集,可以用来目标检测,实例分割,语义分割,关键点检测,以及场景描述。在学术界,COCO基本上被分为两个版本,2014版和2017版。2017版是在14版的基础上做得扩充。数据集分为训练集,验证集和测试集。其中测试集在官网服务器上,Ground Truth未公布。COCO的标注存放在json文件中。以2017版...原创 2020-01-01 17:02:21 · 16976 阅读 · 8 评论 -
PyTorch中的topk函数详解
听名字就知道这个函数是用来求tensor中某个dim的前k大或者前k小的值以及对应的index。用法torch.topk(input, k, dim=None, largest=True, sorted=True, out=None) -> (Tensor, LongTensor)input:一个tensor数据k:指明是得到前k个数据以及其indexdim: 指定在哪个维度...原创 2019-12-27 20:58:23 · 51923 阅读 · 7 评论 -
英伟达APEX,多GPU分布式训练,同步Batchnorm,自动混合精度训练法宝指南
上一篇博客我讲解了APEX如何配置,以及简单的使用。这一篇主要讲一下注意细节。英伟达(NVIDIA)训练深度学习模型神器APEX使用指南多GPU,同步BN,自动混合精度结合当前时代背景,这三个可以说是能训练好网络的基本条件。多GPU重要性不多说,既然都使用了多GPU,同步BN自然缺不得,还不知道同步BN(Sync BN)的同学,赶紧去查查吧。自动混合精度(amp)是干啥的,点击上面的链接,上...原创 2019-11-25 14:57:27 · 8736 阅读 · 14 评论 -
英伟达(NVIDIA)训练深度学习模型神器APEX使用指南
你是否苦闷于教研室卡不多,卡显存不大,很多模型没法跑,是否发愁不能用很大的batch size导致loss没法降低。如果你使用的是PyTorch,恭喜你,你完全可以使用APEX从中解脱出来。APEX是什么APEX是英伟达开源的,完美支持PyTorch框架,用于改变数据格式来减小模型显存占用的工具。其中最有价值的是amp(Automatic Mixed Precision),将模型的大部分操作都...原创 2019-11-22 18:18:04 · 26388 阅读 · 10 评论 -
Pytorch错误记录,关于多GPU训练的问题
刚刚遇到一个极其奇葩的问题。我搭建好了模型,先是在一个GPU下,以如下形式进行了测试model = xxxNet()model.train()model.cuda()x = torch.randn(1,3,320,640)model(x)代码正确运行,说明在单GPU下,模型搭建的没问题。满心欢喜,要开始训练了。然后用了DataParallel,结果报了如下错误。RuntimeE...原创 2019-11-15 20:52:43 · 1793 阅读 · 0 评论 -
PyTorch中torch.nn.functional.unfold函数使用详解
首先跳到函数定义中,看一下有哪些参数。def unfold(input, kernel_size, dilation=1, padding=0, stride=1): """ input: tensor数据,四维, Batchsize, channel, height, width kernel_size: 核大小,决定输出tensor的数目。稍微详细讲 ...原创 2019-11-09 22:39:57 · 31355 阅读 · 9 评论 -
LibTorch:PyTorch的C++之路之环境配置(一)
LibTorch何许人也?从PyTorch进入1.0时代起,faceBook就上架了Pytorch支持C++导入模型的torch.jit API, 用于生成支持C++ API的模型文件,那么这个C++ API 叫什么呢?他就是本期主角LibTorch。作为系列篇的第一篇,我们先讲讲环境配置。同样和Python端有没有GPU分配置无GPU的Libtorch和有GPU的LibTorch。作者仅配...原创 2019-11-07 19:13:12 · 5738 阅读 · 16 评论 -
PyTorch中torch.nn.functional.pad函数使用详解
顾明思义,这个函数是用来扩充张量数据的边界的。但是PyTorch中,pad的函数和numpy以及tensorflow的pad用法都不一样。今天就带来这个函数简明的用法解释。首先跳到函数定义中,看一下有哪些参数。def pad(input, pad, mode=‘constant’, value=0)input : 输入张量pad: 指定padding的维度和数目,形式是元组,稍后讲。...原创 2019-11-06 18:54:15 · 29411 阅读 · 3 评论 -
深度学习分类、识别等任务常用的余弦距离和对应的PyTorch代码
余弦距离常常在人脸识别,图像分类,行人重识别中应用。自从centerNet可视化了softmax loss之后,人们得知神经网络的输出空间原来是呈现原点向外发散状,分类结果是可以通过判断两个样本在输出空间对应的向量之间的夹角来得知是否是同一类样本。这个夹角就是所谓的余弦距离,夹角越小,两个样本越相似。预备的数学知识cos曲线:比如现在有样本A,B,对应在输出空间的特征向量分别是...原创 2019-11-01 10:23:30 · 3973 阅读 · 0 评论 -
BatchNorm的个人解读和Pytorch中BN的源码解析
BatchNorm已经作为常用的手段应用在深度学习中,效果显著,加快了训练速度,保证了梯度的流动,防止过拟合,降低网络对初始化权重敏感程度,减少对调参的要求。今天自己就做个总结,记录一下BatchNorm,并从Pytorch源码来看BatchNorm。BN的灵感来源讲解BN之前,我们需要了解BN是怎么被提出的。在机器学习领域,数据分布是很重要的概念。如果训练集和测试集的分布很不相同,那么在训练...原创 2019-10-25 10:21:20 · 5766 阅读 · 5 评论 -
DR-GAN代码实现记录
我主要基于此github代码修改所写。其实只是自己修改了dataset的部分。代码使用pytorch1.0。链接中的代码需要几个.npy文件,作者也没提供,也没有生成这些.npy文件的代码,所以我只有撸起袖子自己写这一部分,再和作者代码对接就行了。关于DR-Gan的论文解读见here数据读取class FaceIdPoseDataset(Dataset): # ass...原创 2019-02-15 20:39:47 · 5014 阅读 · 17 评论 -
Pytorch中,动态调整学习率、不同层设置不同学习率和固定某些层训练的方法
动态调整学习率三种方法我都写成直接调用的函数了,所以大家复制走拿去用就行了。第一种 官方例子中按照milestone调整的办法def adjust_learning_rate(optimizer, epoch, milestones=None): """Sets the learning rate: milestone is a list/tuple""" def ...原创 2019-02-19 21:06:03 · 22757 阅读 · 3 评论 -
记住在PyTorch中构建模型后初始化权重
我尝试过不初始化__init__函数中的权重,会发生什么。结果是网络无法收敛。因此,有必要在构造函数中初始化您的模型。下面是一个例子。这里我构建一个简单的模型.from torch import nnclass simpleModel(nn.Module): def __init__(self): super(simpleModel,self).__init_...原创 2019-02-13 18:34:22 · 1364 阅读 · 0 评论 -
Pytorch中,只导入部分模型参数的做法
我们在做迁移学习,或者在分割,检测等任务想使用预训练好的模型,同时又有自己修改之后的结构,使得模型文件保存的参数,有一部分是不需要的(don’t expected)。我们搭建的网络对保存文件来说,有一部分参数也是没有的(missed)。如果依旧使用torch.load(model.state_dict())的办法,就会出现 xxx expected,xxx missed类似的错误。那么在这种情况下...原创 2019-02-26 18:50:38 · 26001 阅读 · 11 评论 -
Pytorch中,将label变成one hot编码的两种方式
由于Pytorch不像TensorFlow有谷歌巨头做维护,很多功能并没有很高级的封装,比如说没有tf.one_hot函数。本篇介绍将一个mini batch的label向量变成形状为[batch size, class numbers]的one hot编码的两种方法,涉及到tensor.scatter_tensor.index_select使用scatter_获得one hot 编码...原创 2019-03-20 21:25:18 · 74269 阅读 · 15 评论 -
Pytorch中,读取图像的数据格式(dtype)对模型精度的影响(错误记录)
今天在使用github开源的deeplabV2时,因为使用cv2.imread读取图像默认为uint8类型,导致分割精度很低。同时还发现一些别的问题,特此记录。数据格式问题总体来说就是:cv2.imread读取数据格式默认uint8,做数据归一化(预处理阶段)会导致精度缺失,最后导致分割精度下降先看如下代码:model = Res_Deeplab(21)model.load_s...原创 2019-04-01 11:26:57 · 2217 阅读 · 0 评论 -
PyTorch和Keras计算模型参数的方法
Pytorch中,变量参数,用numel得到参数数目,累加def get_parameter_number(net): total_num = sum(p.numel() for p in net.parameters()) trainable_num = sum(p.numel() for p in net.parameters() if p.requires_grad...原创 2019-06-25 09:17:45 · 1643 阅读 · 1 评论 -
Pytorch转keras的有效方法,以FlowNet为例
Pytorch凭借动态图机制,获得了广泛的使用,大有超越tensorflow的趋势,不过在工程应用上,TF仍然占据优势。有的时候我们会遇到这种情况,需要把模型应用到工业中,运用到实际项目上,TF支持的PB文件和TF的C++接口就成为了有效的工具。今天就给大家讲解一下Pytorch转成Keras的方法,进而我们也可以获得Pb文件,因为Keras是支持tensorflow的,我将会在下一篇博客讲解获得...原创 2019-06-25 10:15:23 · 8302 阅读 · 9 评论 -
Pytorch中的一些训练技巧
冻结bn层如果你使用了预训练模型,并且显卡不支持你使用很大的batch size,那么冰冻bn的参数就是很好的选择,因为在imageNet上预训练的模型,bn层会获得很好的running mean和running var。 for name, m in model.named_modules(): if isinstance(m, nn.BatchNorm2d): ...原创 2019-08-25 17:16:54 · 1762 阅读 · 1 评论 -
Pytorch训练过程出现nan
今天使用shuffleNetV2+,使用自己的数据集,遇到了loss是nan的情况,而且top1精确率出现断崖式上升,这显示是不正常的。在网上查了下解决方案。我的问题是出在学习率上了。我自己做的样本数据集比较小,就三类,每类大概三百多张,初始学习率是0.5。后来设置为0.1就解决了。按照解决方案上写的。出现nan的情况还有以下几种:学习率太大,但是样本数据集又很小。...原创 2019-08-21 20:12:05 · 21302 阅读 · 10 评论 -
Pytorch中Balance binary cross entropy损失函数的写法
balance binary cross entropy损失函数在分割任务中很有用,因为分割任务会遇到正负样本不均的问题,甚至在边缘的分割任务重,样本不均衡达到了很高的比例。我们先来了解原理,再了解具体如何编程。原理比如一个预测结果,记作P∈RH×WP \in R^{H \times W}P∈RH×W,对应的label是R,尺寸一样。R中的1和0,即正负样本比例很不协调。我们想给这两个类别一...原创 2019-09-28 23:06:28 · 7778 阅读 · 6 评论 -
How to use pytorch to build a network?
1. set configuration including essential hyper parameters, you can use easydict to achieve this partfrom easydict import EasyDict as edictconf = edict()conf.batch_size = xxxconf.model_path = xxx...原创 2019-01-20 15:31:12 · 251 阅读 · 0 评论