深度学习调参技巧总结
深度学习调参技巧总结
做dl也有一段时间了,积累了一些经验,也在网上看到一些别人的经验。
为了面试,结合知乎上面的问答,我也总结了一下,欢迎大家补充。
知乎 深度学习调参有哪些技巧?
一. 初始化
有人用normal初始化cnn的参数,最后acc只能到70%多,仅仅改成xavier,acc可以到98%。
二.从理解CNN网络以产生直觉去调参数的角度考虑,应该使用可视化
可视化(知乎用户 杨军)
1.Visualize Layer Activations
原则上来说,比较理想的layer activation应该具备sparse和localized的特点。
如果训练出的模型,用于预测某张图片时,发现在卷积层里的某个feature map的activation matrix可视化以后,基本跟原始输入长得一样,基本就表明出现了一些问题,因为这意味着这个feature map没有学到多少有用的东西。
2.Visualize Layer Weights
除了可视化隐藏层的activation以外,可视化隐藏层的模型weight矩阵也能帮助我们获得一些insights。
3.Embedding the Hidden Layer Neurons with t-SNE
这个方法描述起来比较直观,就是通过t-SNE[10]对隐藏层进行降维,然后以降维之后的两维数据分别作为x、y坐标(也可以使用t-SNE将数据降维到三维,将这三维用作x、y、z坐标,进行3d clustering),对数据进行clustering,人工review同一类图片在降维之后的低维空间里是否处于相邻的区域。
三.调参技巧 [知乎用户 Captain Jack]
- 刚开始, 先上小规模数据, 模型往大了放, 只要不爆显存, 能用256个filter你就别用128个. 直接奔着过拟合去. 没错, 就是训练过拟合网络, 连测试集验证集这些都可以不用.就是为了看整体训练流程没有错误,假如loss不收敛就要好好反思了。
- 观察loss胜于观察准确率
准确率虽然是评测指标, 但是训练过程中还是要注意loss的. 你会发现有些情况下, 准确率是突变的, 原来一直是0, 可能保持上千迭代, 然后突然变1. - Learning Rate设置合理
- 太大: loss爆炸, 或者nan,或者loss根本不降而且维持较大值,因为有可能就是走过最优点了,每一步都走得太大
- 太小: 半天loss没反映(但是, LR需要降低的情况也是这样, 这里可视化网络中间结果, 不是weights, 有效果, 俩者可视化结果是不一样的, 太小的话中间结果有点水波纹或者噪点的样子, 因为filter学习太慢的原因, 试过就会知道很明显)
- 需要进一步降低了: loss在当前LR下一路降了下来, 但是半天不再降了.
- 如果有个复杂点的任务, 刚开始, 是需要人肉盯着调LR的. 后面熟悉这个任务网络学习的特性后, 可以扔一边跑去了.
- 如果上面的Loss设计那块你没法合理, 初始情况下容易爆, 先上一个小LR保证不爆, 等loss降下来了, 再慢慢升LR, 之后当然还会慢慢再降LR, 虽然这很蛋疼.
- LR在可以工作的最大值下往小收一收, 免得ReLU把神经元弄死了. 当然, 我是个心急的人, 总爱设个大点的.
4.简短的注意事项:
预处理: -mean/std zero-center就够了, PCA, 白化什么的都用不上. 我个人观点, 反正CNN能学习encoder, PCA用不用其实关系不大, 大不了网络里面自己学习出来一个.
shuffle, shuffle, shuffle.
网络原理的理解最重要, CNN的conv这块, 你得明白sobel算子的边界检测
Dropout, Dropout, Dropout(不仅仅可以防止过拟合, 其实这相当于做人力成本最低的Ensemble, 当然, 训练起来会比没有Dropout的要慢一点, 同时网络参数你最好相应加一点, 对, 这会再慢一点)
.CNN更加适合训练回答是否的问题, 如果任务比较复杂, 考虑先用分类任务训练一个模型再finetune.无脑用ReLU(CV领域).
无脑用3x3.无脑用xavier.
LRN一类的, 其实可以不用. 不行可以再拿来试试看.现在一般就是用batch normalization了
filter数量2^n.
多尺度的图片输入(或者网络内部利用多尺度下的结果)有很好的提升效果.
第一层的filter, 数量不要太少. 否则根本学不出来(底层特征很重要).
sgd adam 这些选择上, 看你个人选择. 一般对网络不是决定性的. 反正我无脑用sgd + momentum.
batch normalization我一直没用, 虽然我知道这个很好, 我不用仅仅是因为我懒. 所以要鼓励使用batch normalization.
不要完全相信论文里面的东西. 结构什么的觉得可能有效果, 可以拿去试试.
你有95%概率不会使用超过40层的模型
.shortcut的联接是有作用的.暴力调参最可取, 毕竟, 自己的生命最重要. 你调完这个模型说不定过两天这模型就扔掉了.
机器, 机器, 机器.
Google的inception论文, 结构要好好看看.
一些传统的方法, 要稍微了解了解. 我自己的程序就用过1x14的手写filter, 写过之后你看看inception里面的1x7, 7x1 就会会心一笑…因为这就是提取横竖条纹的。
加data augmentation
知乎匿名用户:
感觉除了层数和每层隐节点的个数,也没啥好调的。其它参数,近两年论文基本都用同样的参数设定:迭代几十到几百epoch。sgd,mini batch size从几十到几百皆可。步长0.1,可手动收缩,weight decay取0.005,momentum取0.9。dropout加relu。weight用高斯分布初始化,bias全初始化为0。最后记得输入特征和预测目标都做好归一化。做完这些你的神经网络就应该跑出基本靠谱的结果,否则反省一下自己的人品。
深度学习调参技巧总结相关推荐
- 深度学习这么调参训练_深度学习调参技巧
训练技巧对深度学习来说是非常重要的,作为一门实验性质很强的科学,同样的网络结构使用不同的训练方法训练,结果可能会有很大的差异.这里我总结了近一年来的炼丹心得,分享给大家,也欢迎大家补充指正. 参数初始 ...
- 深度学习调参技巧(一)
本文将分享一些自己关于深度学习模型调试技巧的总结思考(以CNN为主). 最近因为一些需要,参与了一些CNN建模调参的工作,出于个人习性,我并不习惯于通过单纯的trial-and-error的方式来调试 ...
- [转]深度学习调参技巧
训练技巧对深度学习来说是非常重要的,作为一门实验性质很强的科学,同样的网络结构使用不同的训练方法训练,结果可能会有很大的差异.这里我总结了近一年来的炼丹心得,分享给大家,也欢迎大家补充指正. 参数初始 ...
- 【深度学习】21个深度学习调参技巧,一定要看到最后一个
点击上方"AI算法与图像处理",选择加"星标"或"置顶" 重磅干货,第一时间送达 这篇文章在国外知名的网站 medium 上面获得了一千多的 ...
- 21个深度学习调参技巧,一定要看到最后一个
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|AI算法与图像处理 训练深度神经网络是困难的.它需要知识 ...
- 深度学习调参有哪些技巧?
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 来自 | 知乎 链接 | https://www.zhihu.com/question/250 ...
- 【DLML】深度学习调参有哪些技巧?
深度学习调参有哪些技巧? 编辑:Amusi | 来源:知乎 https://www.zhihu.com/question/25097993 目录 一.为什么要学习调参? 二.调参技巧 1. 评价指 ...
- 深度学习这么调参训练_深度学习调参及训练技巧(转)
深度学习调参及训练技巧(转) 作者:婉儿飞飞 链接:https://www.jianshu.com/p/0b116c43eb16 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并 ...
- 深度学习调参体验(一)
深度学习调参体验(一) 基本原则: 快速试错 一.一些大的注意事项: 1.先上小规模数据, 模型往大了放, 只要不爆显存, 能用256个filter就别用128个.直接奔着过拟合去.就是训练过拟合网络 ...
最新文章
- NLP—word2vec词向量简介
- Raspberry Pi 3 计算模块,CPU性能提高了十倍
- 数据库实验一(MySQL基本操作命令总结)
- 跨境电商独立站门槛高,为什么还有无数人挤破头想入坑!
- sqlserver 查询某个时间段执行sql语句_为什么 SQL 查询不是先执行SELECT语句?
- 阿里云ECS服务器搭建Nginx+PHP+MySql+Redis环境详细步骤(CentOS7环境)
- Simple2D-22(重构)纹理池
- UVA 10529 Dumb Bones 可能性dp 需求预期
- Azure 中 Windows 虚拟机的大小
- WSO2身份服务中的关键概念一: 单点登录与身份联合
- window.performance(监控网页与程序性能)
- C语言if 语句的基本用法
- 3Dmax自动加载脚本错误,语法错误:位于bad,需要因子
- Gradle项目在IDEA中运行时提示:Unnecessarily replacing a task that does not exist is not supported. Use create
- 微信小程序安卓密码加密的小黑点太大
- PHP毕业设计源代码剧影评|剧评影评系统
- 调试运用(电流标幺化,PWMDAC调试,ARCTAN反正切)
- PHPSpreadsheet
- Python用Turtle画美国国旗
- iOS 手势的使用 六个手势 轻拍 长按 拖拽 捏合 轻扫 旋转