pytorch
文章平均质量分 67
pytorch代码实战,pytorch代码实战
只会git clone的程序员
博客资料链接失效或者文件找不到可以私信索要!
当前在探索的领域:机器瞎学 人工智障 模式混淆 数据掩埋 计算机幻觉 劝退系统
展开
-
torch dist分布式数据汇总
torch多卡有时候需要验证指标,但是数据被拆分到每张卡上了,因此需要整体数据汇总再计算,可以使用torch分布式的all_gather方法。见下面链接:https://murphypei.github.io/blog/2020/09/pytorch-distributed原创 2022-07-12 18:52:51 · 479 阅读 · 0 评论 -
深度学习多机多卡batchsize和学习率的关系
前言最近的一些实验感觉碰到一些玄学的问题。总结一下:纯FC的网络,学习率对训练结果的影响很大。实验现象是这样的,把resnet50的backbone给冻结了之后,只训练后面的head部分(不是简单的几层FC,还是比较复杂的结构拼了些transformer的block还有很重的MLP),发现不同的学习率会有两个点多的浮动。单机多卡和多机多卡即使全局batchsize对齐训练结果仍有较大的diff,实验结果是差了2个多点。玄学一在没冻结backbone之前没有这样的情况出现。有点怀疑的地方是因为原创 2022-04-20 12:10:23 · 10829 阅读 · 5 评论 -
loss nan解决办法
前言今天查了一下午加晚上的bug…记录一下…解决办法减小学习率加大batchsize(相当于减小学习率)关闭fp16减小学习率或加大batchsize的原因原因很简单,过大的学习率学飞了…关闭fp16今天就是被这个坑的…FP16的作用减少显存占用,FP16 的内存占用只有 FP32 的一半,自然地就可以帮助训练过程节省一半的显存空间。加快训练和推断的计算,在大部分的测试中,基于 FP16 的加速方法能够给模型训练带来多一倍的加速体验。但是这样减少内存的前提是损失了浮点数的精原创 2022-01-17 22:10:07 · 1729 阅读 · 3 评论 -
多卡同步bn的原理与推导
bn的计算训练时统计训练数据的均值和方差(前向传播的时候更新)。测试时使用训练的均值和方差。bn的作用使模型不用去学习复杂的数据分布导致过拟合为模型提供有效地正则化防止过拟合(和上面一条一个意思更专业)加速网络收敛防止梯度消失多卡为什么同步BN多卡的原理:模型并行,将模型放在不同的卡上,可以不用同步bn数据并行,将数据拆分放在不同的卡上需要同步bn对于数据并行的情况,因为每张卡处理的数据不同因此每张卡在前向传播统计得到的bn参数(均值、方差)自然也不同,因为越大的batchs原创 2021-12-20 12:26:09 · 1466 阅读 · 0 评论 -
pytorch随机种子无法复现
随机种子设置:random.seed(1)np.random.seed(1)torch.manual_seed(1)cudnn.deterministic = Truetorch.cuda.manual_seed_all(1)cudnn.benchmark = Falseos.environ['PYTHONHASHSEED'] = str(1)以上设置了仍然可能会无法复现,如果你得代码加载数据的时候使用了numworkers,你需要确保你几份代码的numworkers的个数一样,不一样会直原创 2021-10-29 23:56:46 · 1878 阅读 · 0 评论 -
PyTorch】RuntimeError: one of the variables needed for gradient computation has been modified by an
解决forward()函数里面不要用:tensor1 += 1这样的操作改成:tensor1 = tensor1 + 1都ok!原创 2021-10-14 01:20:04 · 179 阅读 · 0 评论 -
dataloader卡住!!!
前言感谢这篇博客:http://blog.ziyouman.cn/?id=75,总结了全部的可能。原因我这里的情况是第一种,真的写的时候没注意到这个问题…我的情况的大概是这样,我定义的dataloader是Iterloader,所以在每次新的epoch前会调用dataloader.new_epoch(),问题就出在这里了,调用new_epoch函数后马上再遍历dataloader,调用dataloader.next(),简单说就基本相当于我连续执行了这两行代码:dataloader.new_ep原创 2021-09-28 23:55:36 · 2106 阅读 · 3 评论 -
ValueError: Expected more than 1 value per channel when training
前言报错这个的可能就三种,我全踩过了,记录一下造福后人原因训练的时候,网络有bn层,但是输入的特征的第一个维度是1,例如:[1,2048]这样的就会报错,因为bn层要计算均值方差,一张图没法统计。出现情况dataloader没有drop last,可能会出现最后一个batch的数量为1评估的时候没有写model.eval()model的结构中用列表或者字典存了bn解决第一种很好解决,将DataLoader中drop_last设置为True即可第二种更好解决,直接加一行model.ev原创 2021-09-27 20:18:52 · 2113 阅读 · 0 评论 -
深度学习经典网络实现与分析 —— VGGNet
代码地址https://github.com/xmy0916/DLNetwork简介参考:https://blog.csdn.net/weixin_42546496/article/details/87915453VGGNet论文给出了一个非常振奋人心的结论:卷积神经网络的深度增加和小卷积核的使用对网络的最终分类识别效果有很大的作用。VGGNet由牛津大学的视觉几何组(Visual Geometry Group)和 Google DeepMind公司的研究员一起研发的的深度卷积神经网络,在 ILS原创 2021-04-29 22:47:45 · 652 阅读 · 0 评论 -
深度学习经典网络实现与分析 —— LeNet
简介LeNet5诞生于1994年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。自从1988年开始,在多年的研究和许多次成功的迭代后,这项由Yann LeCun完成的开拓性成果被命名为LeNet5。重点局部感受野(local receptive fields):基于图像局部相关的原理,保留了图像局部结构,同时减少了网络的权值权值共享(shared weights): 也是基于图像局部相关的原理,同时减少网络的权值参数下采样(sub-sampling):对平移和形变更加鲁棒,实现特征的不变原创 2021-04-27 18:28:39 · 300 阅读 · 0 评论 -
深度学习经典网络实现与分析 —— AlexNet
代码地址https://github.com/xmy0916/DLNetwork简介AlexNet首次在大规模图像数据集实现了深层卷积神经网络结构,点燃了深度学习这把火。其在ImageNet LSVRC-2012目标识别的top-5 error为15.3%,同期第二名仅为26.2%,碾压其他传统的hand-craft 特征方法,使得计算机视觉从业者从繁重的特征工程中解脱出来,转向思考能够从数据中自动提取需要的特征,做到数据驱动。得益于GPU计算性能的提升以及大规模数据集的出现,自此后每年的ImageN原创 2021-04-28 17:41:19 · 515 阅读 · 0 评论 -
深度学习经典网络实现与分析
前言学习深度学习一年了,感觉基础知识掌握的还是不牢固,从基础网络结构开始分析一下原理并且用代码搭建出来,希望新的学习有不一样的理解。经典网络LeNetAlexNet…原创 2021-04-28 17:48:16 · 232 阅读 · 4 评论 -
attention_ocr分析
前言本来打算看看attention的代码然后自己写一下到之前的crnn项目中,但是高估自己了…网上的理论看的不明不白,代码也看不太懂,重新找了个attention的ocr代码理解下这些矩阵的运算过程,然后最后再自己写一下~项目地址https://codechina.csdn.net/mirrors/andy-zhujunwen/attention_ocr.pytorch分析对于开源的代码,我稍微修改了点内容适配python3,作者应该是python2写的,有些小报错~数据集还是使用MLT2017原创 2021-02-16 16:02:14 · 700 阅读 · 4 评论 -
从零写CRNN文字识别 —— (6)训练
前言完整代码已经上传github:https://github.com/xmy0916/pytorch_crnn训练训练部分的代码逻辑如下:for epoch in range(total_epoch): for data in dataloader: 数据输入模型(前馈) 根据输出计算loss loss反馈更新网络参数 if epoch % eval_epoch == 0: 评估数据输入模型(前馈) 根据输出计算loss 解码输出计算识别准确原创 2021-02-12 13:52:13 · 2757 阅读 · 8 评论 -
从零写CRNN文字识别 —— (5)优化器和Loss
简介上一节完成了模型的前向传播,最后从LSTM层拿到了[41,32,106]的输出矩阵,这里32好理解是batch_size,106是字典的数目,41有点理解不了了…先不管了,看看代码对应的loss和优化器怎么设计的。优化器这里先试试adam优化器,参考的代码还封装了两个其他的优化器,首先在配置文件中设置优化器的选择以及超参:封装的优化器函数,这段代码加到utils.py中:def get_optimizer(config, model): optimizer = None原创 2021-02-09 11:35:39 · 1822 阅读 · 5 评论 -
从零写CRNN文字识别 —— (4)搭建模型
前言模型文件放在model文件夹下,命名model.py模型import torch.nn as nnimport torch.nn.functional as Fclass BidirectionalLSTM(nn.Module): # Inputs hidden units Out def __init__(self, nIn, nHidden, nOut): super(BidirectionalLSTM, self).__init__()原创 2021-02-05 19:27:39 · 1426 阅读 · 7 评论 -
从零写CRNN文字识别 —— (3)数据加载器
简介上一节实现了加载配置,加载配置文件可以方便的进行参数的修改,这一节实现加载数据。DataLoader我使用的数据是MLT2017的数据集,在其中把法语的分割出来了,数据集下载地址:法语OCR识别数据集其中解压后包含训练集图片文件夹、测试集图片文件夹、训练集标签文件和测试集标签文件以及字典文件。数据可以放置在工程的data文件夹下或者你喜欢的位置,加载数据的代码自然就放在data文件夹下,命名dataset.py:import torch.utils.data as data # 加载torc原创 2021-02-04 18:51:34 · 1460 阅读 · 3 评论 -
从零写CRNN文字识别 —— (2)准备配置文件
配置文件本项目使用json格式的配置文件,这种格式可以直接用json包解析使用比较方便。在config文件夹下创建config.yml文件,这个文件包含了一些基础配置和超参的设置,因为从头写项目这些参数还不确定可以先复制一份完整的过来,后续字形修改。GPUID: 0WORKERS: 1PRINT_FREQ: 10SAVE_FREQ: 10PIN_MEMORY: FalseOUTPUT_DIR: 'output'CUDNN: BENCHMARK: True DETERMINISTI原创 2021-02-04 18:50:50 · 1882 阅读 · 9 评论 -
从零写CRNN文字识别 —— (1)准备工作
简介本系列文章基于pytorch框架从零写CRNN文字识别项目,网上有很多优秀的开源代码,但是拿到一个复杂完整的工程对于新手真的太难太难看懂了,更别说优化代码。然后我最开始也是想找个视频教程或者博客教程学一下如何从零开始设计一个完整项目的,发现这方面保姆级别的教程实在是太少(可能大神都不愿意教学就好像代码不愿意写注释一样)。所以,记录一下自己学习一个项目的完整过程,后续会继续优化尝试加入attention和嵌入文字位置特征等,然后做一个latex公式识别的小项目(希望能做出来)。参考资料论文地址:ht原创 2021-02-04 18:49:15 · 2512 阅读 · 12 评论 -
深度学习实战——siamese network人脸比对
参考项目:Facial-Similarity-with-Siamese-Networks-in-Pytorch本文项目地址:https://github.com/xmy0916/SiameseNet_face_compare运行方式训练python3 train.py评估:python3 eval.py评估代码运行会保存卷积层的输出结果的图像在output文件夹下:...原创 2021-01-28 16:31:56 · 476 阅读 · 0 评论