如何根据训练/验证损失曲线诊断我们的神经网络 | 您所在的位置:网站首页 › 过拟合模型 › 如何根据训练/验证损失曲线诊断我们的神经网络 |
第一部分
转载文章:如何根据训练/验证损失曲线诊断我们的CNN 前言在关于训练神经网路的诸多技巧Tricks(完全总结版)这篇文章中,我们大概描述了大部分所有可能在训练神经网络中使用的技巧,这对如何提升神经网络的准确度是很有效的。 然而在实际中,在方法几乎定型的时候,我们往往需要针对自己的任务和自己设计的神经网络进行debug才能达到不错的效果,这也就是一个不断调试不断改进的一个过程。 如何Debug以下的内容部分来自CS231n课程,以及汇总了自己在训练神经网络中遇到的很多问题。 让我们先谈点简单的,如果不考虑debug,采取什么方式可以提升我们的训练精度呢? 吴恩达曾提出了这几点: 寻找更多的数据让网络层数更深一些在神经网络中采取一些新的方法训练的时间更长点(更多的迭代次数)改变batch-size尝试使用正则化技术(权重衰减)权衡结果的偏置和方差(bias and variance)使用更多的GPU以上这些方法和之前的提到的训练神经网络的关于训练神经网路的诸多技巧Tricks(完全总结版)的方法是类似的,是无关乎神经网络本身的通用的方法,而具体细化到自己所在的任务时,我们需要对我们此刻所做的任务进行单独的Debug,来寻找问题所在。 那么我们如何Debug呢?和编写程序类似,神经网络中的超参数相当于我们的代码,而神经网络的输出信息相当于代码执行的结果。 超参数超参数是训练神经网络必不可少的变量,常见的超参数有: 学习速率(如何设置学习率)batchsize权重衰减系数dropout系数选择适用的优化器是否使用batch-normalization神经网络设计的结构(比如神经网络的层数,卷积的大小等等)那么如何去调整这些参数呢?当然是通过观察神经网络的输出信息来做出相应的修改了,而观察神经网络输出信息的利器就是可视化。 可视化观察训练过程中各种参数的变化是非常重要的,首先最重要的当属损失曲线(loss curves)。
总结下,如果你认为你的神经网络设计没有明显错误的,但损失曲线显示仍然很奇怪,那么很有可能: 损失函数采用的有问题训练的数据的载入方式可能有问题优化器(optimizer)可能有问题一些其他的超参数设置可能有问题 总而言之,损失曲线是观察神经网络是否有问题的一大利器,我们在训练过程中非常有必要去观察我们的损失曲线的变化,越及时越好! 正则化除了损失函数曲线,准确率曲线也是我们观察的重点,准确率曲线不仅可以观察到我们的神经网络是否往正确方向前进,更主要的是:观察损失和准确率的关系。因为我们在衡量一个任务的时候使用的评价标准(metric)和使用的损失函数往往是不相同的,比较典型的例子是: 图像分割中的IOU评价标准和DICE损失函数。 “Dice” is a a metric for model evaluation equal to intersection(A,B)/(A+B). Similar to IoU (IoU = intersection(A,B)/union(A,B)), it is used to assess a quality of image segmentation models. “Accuracy” is not really good for this task. For example, in this competition, you can quite easily get 99.9% accuracy of predicted pixels, but the performance of the models may be not as great as you think. Meanwhile, such metrics as dice or IoU can describe your models reasonably well, therefore they are most often used to asses publicly available models. The implementation of the metric used for score evaluation in this competition takes some time and requires additional post-processing, such as mask splitting. Therefore, it is not so common for quick model evaluation. Also, sometimes “soft dice” (dice with multiplication instead of intersection) is used as a loss function during training of image segmentation models. 当然,还有随机失活和权重衰减两个比较重要的超参数,这两个参数通过观察损失曲线观察是不明显滴,只有通过特定的评价标准曲线,设置好标准再进行比较,才可以判断出是否需要添加dropout或者weight decay。 但是标准化技术通常只用于分类(以及衍生的一些应用),但并不适合与那种对输入图像大小比较敏感以及风格迁移生成类的任务,不要问为什么,结果会给你答案… batch-normalization的好处:https://www.learnopencv.com/batch-normalization-in-deep-networks/ 相关讨论:https://www.zhihu.com/question/62599196 而我们也是通过观察准确率和损失值的曲线来判断是否需要加入标准化技术。
|
CopyRight 2018-2019 实验室设备网 版权所有 |