五神经网络过拟合处理方法

Posted 满目星辰wwq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五神经网络过拟合处理方法相关的知识,希望对你有一定的参考价值。

1. 什么是过拟合?

过拟合(Overfitting):模型过于复杂(所包含的参数过多),以致于模型对训练集的拟合很好,但对未知数据预测很差的现象(泛化能力差)。
在这里插入图片描述
过拟合可以通过观测训练集和验证集的loss变化判断:随着epoch或step的增加,训练集
loss不断下降,而验证集loss先下降后抬升。

2. 常见过拟合解决办法有哪些?

(1)增加训练数据量
①采集更多的数据;
②数据增广(image augmentation):对已有数据做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。这里不讲数据增广,有兴趣的可以查看tf.keras.preprocessing.image.ImageDataGenerator这个api。

(2)减少模型复杂度
①减少隐层
②减少神经元个数

(3)添加正则项
tf.keras.regularizers.l2
用到的参数:
l:惩罚项,默认为0.01。

(4)提前终止(Early Stopping)
在这里插入图片描述
训练的过程中,记录到目前为止最好的验证集结果,当连续10个Epoch(或者更多次)没有超越最佳结果时,则可以认为精度不再提高。

导入模块: tf.keras.callbacks.EarlyStopping
用到的参数:
monitor:监控的数据,一般为’val_loss’。
min_delta:定义模型改善的最小量,只有大于min_delta才会认为模型有改善,默认为0。
patience:有多少个epoch,模型没有改善,训练就会停止,默认为0。
restore_best_weights:是否使用监控数据最好的模型参数,如果是False,使用的是训练最后一步的模型参数,默认False。

(5)Dropout 在这里插入图片描述
训练阶段:每个step以一定的概率p让神经元停止工作。
预测阶段:所有神经元都是工作的,但所有权值需要乘上(1-p)。
导入模块: tf.keras.layers.Dropout
用到的参数:
rate:神经元失效的概率,取值0~1的浮点数。
seed:随机种子,取正整数。
name:输入字符串,给该层设置一个名称。

3. Dropout详解

(1) Dropout为何有效?
在这里插入图片描述
Hinton的解释:Dropout相当于对原来网络进行修剪,得到参数规模较小的网络,这样的网络
不容易发生过拟合现象,最后对训练过程中所有的小网络进行集成(回归任务:相当于求平均,
分类任务:相当于少数服从多数),从而减小泛化误差,思想类似于集成学习。
在这里插入图片描述
(2)Dropout的缺点:
达到同样的精度需要更长的训练时间。通常p初始值取0.5,原因:p=0.5时所有小网络出现的概率相同,不会对某些网络有偏向。
(3)为什么预测阶段所有权值需要乘上(1-p)?
例:10匹马拉一个10吨的车。
第一次(训练时):只有4匹马出力(有p=0.6概率被dropout),每匹要出力拉2.5吨;
第二次(测试时):10匹马都被要求出力,这次每匹马要出力拉2.5×(1-0.6)=1吨
注:主流的深度学习框架(tensorflow、pytorch、mxnet等)都会自动处理这一步,所以不需要自己操作。

以上是关于五神经网络过拟合处理方法的主要内容,如果未能解决你的问题,请参考以下文章

防止神经网络模型过拟合的6种方法及keras代码实现

PyTorch学习(十三)过拟合

79tensorflow计算一个五层神经网络的正则化损失系数防止网络过拟合正则化的思想就是在损失函数中加入刻画模型复杂程度的指标

深度学习Trick——用权重约束减轻深层网络过拟合|附(Keras)实现代码

神经网络:欠拟合和过拟合

Tensorflow学习教程------过拟合