TensorFlow2学习笔记--过拟合和欠拟合

过拟合:

overfitting,train的效果很好,但是test时不行,因为模型复杂度太高,因为数据都会有一些随机的噪声,模型过度拟合带噪声的数据,导致test时拟合不好

欠拟合:

underfiting,train和test的loss一直下不去,而且acc也差,往往是因为模型复杂度小于实际数据的复杂度。

TensorFlow2学习笔记--过拟合和欠拟合

 

多项式阶数越高的模型能拟合表达的就越复杂,网络越深,参数越多,模型的表达能力也越强

 TensorFlow2学习笔记--过拟合和欠拟合

下图就是一个典型的过拟合,train的表现很好,但是在某个节点后面,由于模型过于复杂,拟合了很多随机噪声,导致test效果不好

加入验证集就可以及时停止训练,避免过拟合

TensorFlow2学习笔记--过拟合和欠拟合

 

 

验证集:

将数据集划分为三个部分,分别为训练集,验证集(validation),测试集

TensorFlow2学习笔记--过拟合和欠拟合

TensorFlow2学习笔记--过拟合和欠拟合

数据集加载时默认加载成两部分,需要自己把训练集划分出一个验证集出来

把训练集划分出1000个用来做验证集,验证集的目的是验证训练的效果。比如训练时用100个epoch,但是不一定要把100个epoch都训练完,因为模型可能在迭代次数多了以后会出现性能下降,而且浪费时间,所以设置验证集。比如设置5个epoch做一次验证,如果相较于上次验证acc降低了,那就及时停止。

TensorFlow2学习笔记--过拟合和欠拟合

network.fit(db_train, epochs=5, validation=db_val, validation_freq=2)

validation=db_val是指定验证集, epochs是最多训练epochs次,validation_freq=2是指两次epochs做一个验证

 

交叉验证:

如果每次都用同一个验证集做验证的话,会导致模型对那个验证集有依赖性和记忆性,所以需要交叉验证,也就是每次验证取训练集中不同的部分。

 

如何防止过拟合:

1. 更多的数据

2.减少网络深度

3.加入正则项

4.dropout层

5.加入验证集,及时停止训练 

 

regularization正则化:

TensorFlow2学习笔记--过拟合和欠拟合

TensorFlow2学习笔记--过拟合和欠拟合

TensorFlow2学习笔记--过拟合和欠拟合

TensorFlow2学习笔记--过拟合和欠拟合