一,train loss与test loss结果分析

  • train loss 不断下降,test loss不断下降,说明网络仍在学习;
  • train loss 不断下降,test loss趋于不变,说明网络过拟合;
  • train loss 趋于不变,test loss不断下降,说明数据集100%有问题;
  • train loss 趋于不变,test loss趋于不变,说明学习遇到瓶颈,需要减小学习率或批量数目;
  • train loss 不断上升,test loss不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。

https://zhuanlan.zhihu.com/p/136786657

如何解决神经网络训练时loss不下降的问题
https://blog.ailemon.net/2019/02/26/solution-to-loss-doesnt-drop-in-nn-train/

二,训练过程中的梯度检验

使用相对误差做比较,这是实际工程中需要提到的另外一点,在我们得到数值梯度和解析梯度之后,我们如何去比较两者?第一反应是作差对吧,或者顶多求一个平方。但是用绝对值是不可靠的,假如两个梯度的绝对值都在1.0左右,那么我们可以认为1e-4这样一个差值是非常小的,但是如果两个梯度本身就是1e-4级别的,那这个差值就相当大了。所以我们考虑相对误差:

加max项的原因很简单:整体形式变得简单和对称。再提个小醒,别忘了避开分母中两项都为0的情况。OK,对于相对误差而言:
相对误差>1e-2意味着你的实现肯定是有问题的
1e-2>相对误差>1e-4,你会有点担心
1e-4>相对误差,基本是OK的,但是要注意极端情况(使用tanh或者softmax时候出现kinks)那还是太大
1e-7>相对误差,放心大胆使用
哦,对对,还有一点,随着神经网络层数增多,相对误差是会增大的。这意味着,对于10层的神经网络,其实相对误差也许在1e-2级别就已经是可以正常使用的了。

使用双精度浮点数。如果你使用单精度浮点数计算,那你的实现可能一点问题都没有,但是相对误差却很大。实际工程中出现过,从单精度切到双精度,相对误差立马从1e-2降到1e-8的情况。

三,训练过程中的监控

开始训练之后,我们可以通过监控一些指标来了解训练的状态。我们还记得有一些参数是我们认为敲定的,比如学习率,比如正则化系数。

损失/loss随每轮完整迭代后的变化
下面这幅图表明了不同的学习率下,我们每轮完整迭代(这里的一轮完整迭代指的是所有的样本都被过了一遍,因为随机梯度下降中batch size的大小设定可能不同,因此我们不选每次mini-batch迭代为周期)过后的loss应该呈现的变化状况:

合适的学习率可以保证每轮完整训练之后,loss都减小,且能在一段时间后降到一个较小的程度。太小的学习率下loss减小的速度很慢,如果太激进,设置太高的学习率,开始的loss减小速度非常可观,可是到了某个程度之后就不再下降了,在离最低点一段距离的地方反复,无法下降了。下图是实际训练CIFAR-10的时候,loss的变化情况:

大家可能会注意到上图的曲线有一些上下跳动,不稳定,这和随机梯度下降时候设定的batch size有关系。batch size非常小的情况下,会出现很大程度的不稳定,如果batch size设定大一些,会相对稳定一点。

然后我们需要跟踪一下训练集和验证集上的准确度状况,以判断分类器所处的状态(过拟合程度如何):

随着时间推进,训练集和验证集上的准确度都会上升,如果训练集上的准确度到达一定程度后,两者之间的差值比较大,那就要注意一下,可能是过拟合现象,如果差值不大,那说明模型状况良好。

https://blog.csdn.net/u011534057/article/details/51452564

四,Keras的BN层能彻底解决过拟合问题吗?

解决方法:

  1. 扩大数据集,方法很多不管是加更多的新图还是数据增强;
  2. 早停策略,减少epoch,或者提前终止迭代可以有效的控制权值参数的大小,从而降低模型的复杂度;
  3. 权值衰减,在神经网络模型中,可使用权值衰减的方法,即每次迭代过程中以某个小因子降低每个权值;
  4. 保留验证数据集,对训练成果进行验证; 获取额外数据进行交叉验证; 正则化,即在进行目标函数或代价函数优化时,在目标函数或代价函数;
  5. 权值共享,最常见的就是在卷积神经网络中,权值共享的目的旨在减小模型中的参数,同时还能较少计算量,在循环神经网络中也用到了权值共享。
  6. 增加噪声,这也是深度学习中的一种避免过拟合的方法,添加噪声的途径有很多,可以在输入数据上添加,增大数据的多样性,可以在权值上添加噪声,这种方法类似于L2正则化。
  7. Batch Normalization。BM算法会将每一层的输入值做归一化处理,并且会重构归一化处理之后的数据,确保数据的分布不会发生变化。而且有很多变种,比如Layerr Normalization,在RNN或者Transformer中用的比较多。上面的几种方法都是操作在一个模型上,通过改变模型的复杂度来控制过拟合。 另一种可行的方法是结合多种模型来控制过拟合。
  8. Bagging和Boostin,Bagging和Boosting是机器学习中的集成方法,多个模型的组合可以弱化每个模型中的异常点的影响,保留模型之间的通性,弱化单个模型的特性。
  9. Dropout,是深度学习中最常用的控制过拟合的方法,主要用在全连接层处。Dropout方法是在一定的概率上(通常设置为0.5,原因是此时随机生成的网络结构最多)隐式的去除网络中的神经元。

https://www.cnblogs.com/jiangxinyang/p/9281107.html

四,总结

  • 用一部分的数据测试你梯度计算是否正确,注意提到的注意点。 检查你的初始权重是否合理,在关掉正则化项的系统里,是否可以取得100%的准确度。
  • 在训练过程中,对损失函数结果做记录,以及训练集和交叉验证集上的准确度。
  • 最常见的权重更新方式是SGD+Momentum,推荐试试RMSProp自适应学习率更新算法。 随着时间推进要用不同的方式去衰减学习率。
  • 用交叉验证等去搜索和找到最合适的超参数。 记得也做做模型融合的工作,对结果有帮助。

神经网络_训练loss不下降原因集合相关推荐

  1. 神经网络训练loss不下降原因集合

    train loss与test loss结果分析 train loss 不断下降,test loss不断下降,说明网络仍在学习; train loss 不断下降,test loss趋于不变,说明网络过 ...

  2. 机器学习中的训练与损失 test and loss (训练loss不下降原因集合)

    train loss 不断下降,test loss不断下降,说明网络仍在学习; train loss 不断下降,test loss趋于不变,说明网络过拟合; train loss 趋于不变,test ...

  3. 训练loss不下降原因集合

    11年it研发经验,从一个会计转行为算法工程师,学过C#,c++,java,android,php,go,js,python,CNN神经网络,四千多篇博文,三千多篇原创,只为与你分享,共同成长,一起进 ...

  4. 神经网络 测试集loss不下降_【NLP高频面试题】神经网络及其优化

    什么样的数据不适合用神经网络学习? 数据集太小,因为神经网络有效的关键就是大量的数据,有大量的参数需要训练,少量的数据不能充分训练参数. 数据集没有局部相关性.目前深度学习应用的领域主要是图像.语音. ...

  5. 神经网络 测试集loss不下降_代码实践 | 全连接神经网络回归---房价预测

    学习目录 阿力阿哩哩:深度学习 | 学习目录​zhuanlan.zhihu.com 前面我们介绍了: 阿力阿哩哩:深度学习开端|全连接神经网络​zhuanlan.zhihu.com 4.7代码实践 & ...

  6. 深度学习之Loss不下降原因分析篇

    Train & Test Loss train loss 不断下降,test loss不断下降,说明网络仍在学习; train loss 不断下降,test loss趋于不变,说明网络过拟合; ...

  7. 神经网络训练时loss不下降的问题

    原文地址:如何解决神经网络训练时loss不下降的问题 | AI柠檬 当我们训练一个神经网络模型的时候,我们经常会遇到这样的一个头疼的问题,那就是,神经网络模型的loss值不下降,以致我们无法训练,或者 ...

  8. 如何解决神经网络训练时loss不下降的问题

    本文转载,原文链接:https://blog.ailemon.me/2019/02/26/solution-to-loss-doesnt-drop-in-nn-train/ 当我们训练一个神经网络模型 ...

  9. 网络训练时候loss不下降

    当我们训练一个神经网络模型的时候,我们经常会遇到这样的一个头疼的问题,那就是,神经网络模型的loss值不下降,以致我们无法训练,或者无法得到一个效果较好的模型.导致训练时loss不下降的原因有很多,而 ...

最新文章

  1. php调用python脚本_Window环境下,PHP调用Python脚本
  2. HDU - 5920 Ugly Problem(Java大数+贪心)
  3. 发送邮件 的类 C# .net
  4. opencv BRIEF角检测
  5. SQL:插入数据的小坑
  6. CSS三大特性的利用注意事项
  7. 云视频会议对初创公司的益处
  8. 已解决 | burp无法抓取iphone https数据包
  9. java 手机端开发步骤_移动端页面开发流程
  10. AtCoder Beginner Contest 171 D - Replacing
  11. 【Python】绘制GPX轨迹图并定位特定时间点
  12. adf盖怎么打开_兄弟7470d显示ADF盖打开是什么问?
  13. 【教程】百度地图AK申请指南(PM2.5指导版)
  14. 图像处理之Hobject与Mat互转
  15. 现代微积分学的公理观
  16. 鳄鱼法则(特转此贴,给不会止损的朋友们)
  17. 开放接口/RESTful/Api服务的设计和安全方案详解
  18. c# skylin 创建图片标注出现png透明边缘覆盖后面元素解决办法
  19. 【HPC】Intel SIMD技术——如何用code检查你的CPU支持哪些指令集?
  20. Java注入bean的方式_多种方式实现Spring的Bean注入

热门文章

  1. java switch 循环_JAVA中的switch循环
  2. linux 使用scp命令,Linux scp命令
  3. Halcon 中实现 Otsu 算法
  4. mutt配置文件_Linux使用Mutt发送邮件/附件
  5. BGP协议总结(比较详细,好理解)
  6. DM8 DEM 部署
  7. iPhoto的删除动画
  8. 苹果将终止照片处理软件iPhoto及Aperture开发
  9. 使用::after清除浮动
  10. 解决idea打开页面端口号为6334