深度学习调参经验

这篇具有很好参考价值的文章主要介绍了深度学习调参经验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

回答:现阶段深度学习已经进入稳定阶段,已经很少需要一些很小的技巧了,尤其是在工程实践方面。往往学习率等超参数依靠经验设置一下就能基本将模型训练好。此外精调学习率超参数能取得的提升也往往是较小的,而且很容易过拟合,在应用场景上影响不大。除非是一个开源的数据集或者比赛数据集,测试集基本不变,通过精调这些参能“过拟合”测试集,获得一些提升。

2.Code Pipeline

一般cv模型的代码都是由这几个模块构成,Data(dataset/dataloader),model本身,optimizer优化器,loss functions,再加上一个trainer其实就是组织整个框架的训练顺序,不太会出错)。如果要构建一个模型,就是依次构建这些地方。

作者:没有故事只有酒
链接:https://www.zhihu.com/question/25097993/answer/2812858376
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

2.1 Data

dataset 构建基本不会有啥问题,构建好了后需要检查一下 输出的数据读取是否正确,同一个batch的数据是否符合需要的逻辑;

2.2 Model

模型这块其实出错的问题也不多,

  1. 模型代码:如果不是自己写新网络,用一些现有的ResNet, Transformer之类的,在对应的开源代码复制就行,需要魔改的话记得修改的部分bug free,基本就不会出现什么问题;
  2. 参数初始化:现在的模型初始化(model.init)pytorch 已经内置的挺好了,比如kaming初始化,xavier初始化等,不太需要自己刻意专门的初始化,就能正常训;
  3. 使用 pretrained 模型时记得把 load 过程打印出来,保证模型被 load 了。
  4. 如果有不懂的 code,请去开源的代码里找,然后复制过来学习参考过来。

2.3 Optimizer

优化器相对能说的点 会多一些

  1. 万能模板 Adam + Cos退火 构建基础:初始构建时选 Adam 优化器(也可以AdamW),超参数跟其他开源代码保持一致,学习率初始时可以设置3.5e-4,可以适当进行调整,基本就在5e-4 ~ 5e-5之间,我这里说的也只是一个经验的参数。你要问为什么,很多大神就用的这个参数,而且这个参数也确实能训好,还是经验。学习率变化选择 warm-up + cos退火,训练epoch可以随便选,比如10,100,等等,具体得看你这个学习任务,选一个更优的就行。假如是10个,可以第1个epoch用warm-up逐步增大lr,然后1~9epoch就 cos 下降lr,终点是9,cos lr结束值设置为一个很小的数1e-7等等。你要是想问为啥 warm刚结束就开始 cos 退火,因为不知道这个数据集咋样,所以就让 lr 缓慢下降就行。一般这样,就能保证模型收敛了。
  2. 如果在 上面基础上,想进一步精调,可以把 epoch 进行网格搜索,看看多少个epoch合适。可以每个epoch在测试集上test一下,不用非得设计的很精准,最终模型我们可以使用中间的checkpoint;
  3. 同样,lr也可以调调,适当放大缩小看看,cos 退化的起始点或者 warm-up的持续时长,也可以试试改改,但是有时候调了作用不大,需要精调的可以试试;
  4. 一般按上述过程,就能训一个收敛的模型,但你说还想进一步提升,可以试试阶梯下降(step delay)的lr衰减策略,因为通过上面过程,epoch,lr初始值基本就拿捏了,可以固定lr值,然后训,发现损失不咋下降了,设置一个 在这个时间点下降 0.1 倍(一般都是10倍下降,经验值,你要说下降一般,也行),然后设置后继续训练,不下降后继续缩小 0.1 倍,这样就大概知道需要的 step 步长了。如果觉得这样比较麻烦,可以固定下降步长为某一值,比如 2 epoch,然后试试 3 epoch, 4 epoch(挨个试的过程也被称为 网格搜索),试一个最优的。(突然想起来一件事,和我打比赛的学弟说你调参调的可以啊,咋调的弄这么高。。。我都不想说我他娘的是 一个个试出来的,不就是网格搜索,哪有啥大技巧(尴尬哈哈))这里提示一下,调参时一定要先 文字记录,然后跑模型 填空,一定要保证 自己知道自己这个实验的目的是什么,这很重要
  5. 还想进一步榨干模型,行,推荐使用 SGD(SGD+Momentum),SDG更难训,但一般最优模型也更好。SGD一般初始学习率为 0.1(具体还得调),然后选择Cos 或者 Step 下降,具体方法跟 Adam 类似,就网格搜索就行,Epoch 的总长度两个基本一致。
  6. 此外,要保证 model 的参数被加载到 optimizer 里了,比如你先后创建了 model1, optimizer, model2,结果你的 model2 的参数未添加到 optimizer里,这部分参数就没参与学习,有可能最后发现结果一直很差,其实是因为模型根本没训练。

2.4 Loss

loss是基本不会出错的地方,但loss也是最容易出错的地方。

  1. loss 函数本身基本不会出错,使用已有loss 一般要保证逻辑是无误的,不会出现一些 log(0) 的操作;
  2. 但模型训练时 总会 loss 值出错,如果 NaN 了,需要看一下,是训练过程中 NaN 了还是第一下就 NaN,一般 NaN 就是梯度爆炸,如果使用的是已有网络,并且 bug free,必须是 Bug free,对修改的地方要多检查,那么从以下考虑:
    1. 先定位到 NaN 出现的时候,在NaN 的时候依次排查
    2. data无误,即 model input 的原始数据 是没问题的,这样就排除了 data 影响,其实排除data 就是把 dataloader 空跑一遍,用 torch.isnan 或者别的方法进行检测,看看源数据是否正确;
    3. loss 无误,即这个 NaN 不是因为 Log(0) 等操作引其的,这个需要排查 loss 函数计算;
    4. model 无误,最后是 model 无误,这个比较难排查,你可以把修改部分的代码复原进行训练,控制变量法找到是不是model的原因。
    5. 如果实现无法解决,梯度 CLIP 防止 NaN 也行,但这样可能治标不治本,不知道为啥 NaN,但是有时候可以继续训。不过我有次经验表示,有时候 Clip 正常的模型,会导致性能下降。就是本来一个模型是正常收敛的,但是我也添加了 clip,最后导致性能不如之前,删除clip后又重新恢复原先的精度。

最后,说一个万能方法,也是我一直在践行的方法:如果你不知道怎么办,怎么训这个网络,怎么改,用什么 optimizer,学习率,数据增广,去看一些杰作是大佬的代码怎么搞的,比如 ViT,比如Clip,SimCLR,看看他们咋搞的,copy过来学习学习总是好的,说白了,调参里面很多经验的东西,学习好的code才是硬道理文章来源地址https://www.toymoban.com/news/detail-658084.html

到了这里,关于深度学习调参经验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习中epoch、batch、step、iteration等神经网络参数是什么意思?

    epoch: 表示将训练数据集中的所有样本都过一遍 (且仅过一遍)的训练过程。在一个epoch中,训练算法会按照设定的顺序将所有样本输入模型进行前向传播、计算损失、反向传播和参数更新。一个epoch通常包含多个step。 batch:一般翻译为“批次”,表示一次性输入模型的一组

    2024年02月10日
    浏览(44)
  • 【深度学习】——LSTM参数设置

    LSTM的批大小可以根据训练数据集的大小和计算资源的限制来确定。一般而言,批大小 越大 ,训练速度越快,但可能会 导致过拟合 和 内存限制 。批大小 越小 ,训练速度越慢,但对于 较大的数据集和内存限制较严格的情况下会更加稳定 。 在实践中,可以通过尝试不同的批

    2024年02月02日
    浏览(40)
  • 深度学习基础入门篇[8]::计算机视觉与卷积神经网络、卷积模型CNN综述、池化讲解、CNN参数计算

    计算机视觉作为一门让机器学会如何去“看”的学科,具体的说,就是让机器去识别摄像机拍摄的图片或视频中的物体,检测出物体所在的位置,并对目标物体进行跟踪,从而理解并描述出图片或视频里的场景和故事,以此来模拟人脑视觉系统。因此,计算机视觉也通常被叫

    2024年02月05日
    浏览(82)
  • 深度学习学习率(lr)调参

    lr全称learning rate(一下简称lr),是机器学习和深度学习中最为重要的超参数之一,会影响模型训练结果的好坏,有时候甚至会直接导致整个模型无法使用。 lr最直接的可观测的影响就是loss值的变化,较大的学习率会更容易收敛也更容易出现陷入局部最优解的情况,而过大的

    2024年02月04日
    浏览(44)
  • 深度学习调参指南

    1. 选择合适的模型架构 模型的结构(层数和宽度),参数配置,尽量用已经有效的模型 2. 选择优化器 针对具体的问题,从选择常用的优化器开始,进行比较 3. 选择BatchSize 1). Batch Size决定训练速度,但是不影响验证集性能 2). 通常选择最大可支持的Bacth Size 3). 增加Batch Size减少训

    2024年02月15日
    浏览(41)
  • 【深度学习 AIGC】stable diffusion webUI 使用过程,参数设置,教程,使用方法

    如果你想使用docker快速启动这个项目,你可以按下面这么操作(显卡支持CUDA11.8)。如果你不懂docker,请参考别的教程。 模型文件即checkpoint已包含了与vae相关的参数。然而,稳定扩散官方和novelai泄露的文件都包含了额外的vae,用于改进面部或其他细节。因此,加载vae文件实

    2024年02月05日
    浏览(53)
  • Deep Learning Tuning Playbook(深度学习调参手册中译版)

    由五名研究人员和工程师组成的团队发布了《Deep Learning Tuning Playbook》,来自他们自己训练神经网络的实验结果以及工程师的一些实践建议,目前在Github上已有1.5k星。原项目地址 本文为《Deep Learning Tuning Playbook》中文翻译版本,全程手打,非机翻。因为本人知识水平有限,翻

    2023年04月27日
    浏览(73)
  • bp神经网络参数怎么设置,神经网络参数个数计算

    神经网络各个网络参数设定原则:①、网络节点  网络输入层神经元节点数就是系统的特征因子(自变量)个数,输出层神经元节点数就是系统目标个数。隐层节点选按经验选取,一般设为输入层节点数的75%。 如果输入层有7个节点,输出层1个节点,那么隐含层可暂设为5个节点

    2024年02月06日
    浏览(47)
  • opencv上设置摄像头曝光参数的经验

    实际应用中我们需要调整摄像头的参数比如曝光,由于opencv的后端是一般编译是支撑多种插件,详细信息请参考OpenCV: Video I/O with OpenCV Overview,这里引用里面的图:   对于VideoCaputure,后端有ffmpge,V4L,DShow等,opencv并没有完全用统一参数来屏蔽后端的差异性,也就是部分参数

    2024年02月05日
    浏览(37)
  • 关于无人机PID调参的经验分享

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、调试思路讲解 二、实际调试方法 总结         本次选用的是X型四轴来调试,配置采用的是飞越的650碳纤机架,电调用的是好赢的奔腾40A,电机同样是新西达2212 1000kV,主控是基于

    2024年04月26日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包