训练过程中过拟合和欠拟合及处理方法

版权声明:本文为博主原创文章,如需转载请附上博文链接 https://blog.csdn.net/wendygelin/article/details/88594576

如果发现训练集Loss低,测试集Loss高,则是过拟合了

如果训练的效果不好,大多数情况下,可以是以下两种问题中的一种:高偏差(high bias,欠拟合)问题;高方差(high variance)问题。训练集Loss低,测试集Loss高基本上是过拟合的问题。处理方法如下:

将数据分为三部分,60%为训练集,20%为Cross Validation (CV),20%为测试集。
如果把test作为选择modeld的指标,则对其他的sample不适用。因此选择CV作为model选择的指标。

损失函数如下所示,如果lamda过小,则会造成过拟合(如果lamda过大,则会造成欠拟合)

那如何选择lamda值呢?

方法是,选取几个不同的lamda值,分别计算模型,在CV上计算该lamda值下的最小error。横向比较不同lamda值下的CV最小error,取“最小error”最小对应的lamda值。

绘制learning curve,可以查看算法是否运行正常,是否有过拟合和欠拟合:

绘制learning curve的方法,横轴是训练样本的数量,纵轴是训练集和交叉验证集的error。正常情况下,随着训练样本的增加,训练集的error先上升后平稳,交叉验证集的error先下降后平稳。如果有欠拟合,则训练集的error很快就上升到一个平台期,随着数据的增大,不再变化。而且随着数据的增大,与交叉验证集的error非常接近;如果有过拟合,则即使数据量已经很大,交叉验证集和训练集的error都有很大的区别。

处理过拟合的方法:

1. 添加训练数据

2. 减少特征个数

3. 增加lamda的值

处理欠拟合的方法:

1. 增加特征个数

2. 降低lamda的值

Caffe中改变lamda的方法:

在solver.prototxt文件中有一个weight_decay,它调节的是正则化项在loss中的权重。而caffe默认的正则化是L2,如果想改成L1,则在solver文件中添加:regularization_type: "L1"。

猜你喜欢

转载自blog.csdn.net/wendygelin/article/details/88594576