Dropout 解决 overfitting
学习资料:
要定¶
Overfitting 也被称为过度学习,过度拟合。 它是机器学习中常见的问题。 举个Classification(分类)的例子。
图中黑色曲线是正常模型,绿色曲线就是overfitting模型。尽管绿色曲线很精确的区分了所有的训练数据,但是并没有描述数据的整体特征,对新测试数据的适应性较差。
举个Regression (回归)的例子,
第三条曲线存在overfitting问题,尽管它经过了所有的训练点,但是不能很好的反应数据的趋势,预测能力严重不足。 TensorFlow提供了强大的dropout方法来解决overfitting问题。
建立 dropout 层¶
本次内容需要使用一下 sklearn 数据库当中的数据, 没有安装 sklearn 的同学可以参考一下这个教程 安装一下. 然后 import
以下模块.
这里的keep_prob
是保留概率,即我们要保留的结果所占比例,它作为一个placeholder
,在run
时传入, 当keep_prob=1
的时候,相当于100%保留,也就是dropout没有起作用。 下面我们分析一下程序结构,首先准备数据,
其中X_train
是训练数据, X_test
是测试数据。 然后添加隐含层和输出层
loss函数(即最优化目标函数)选用交叉熵函数。交叉熵用来衡量预测值和真实值的相似程度,如果完全相同,交叉熵就等于零。
train方法(最优化算法)采用梯度下降法。
训练¶
最后开始train,总共训练500次。
可视化结果¶
训练中keep_prob=1
时,就可以暴露出overfitting问题。keep_prob=0.5
时,dropout
就发挥了作用。 我们可以两种参数分别运行程序,对比一下结果。
当keep_prob=1
时,模型对训练数据的适应性优于测试数据,存在overfitting,输出如下: 红线是 train
的误差, 蓝线是 test
的误差.
当keep_prob=0.5
时效果好了很多,输出如下:
程序中用到了Tensorboard输出结果,可以参考前面教程:
可能会遇到的问题¶
由于评论区中讨论了很多这份代码的问题, 我在此说明一下. 因为 Tensorflow 升级改版了, 原本视频中可以执行的代码可能会遇到一些问题. 强烈推荐看看我2017年根据新版本的 Tensorflow 写的升级版, 简化版代码, 比旧版本的更容易懂, 而且可视化效果做得更好. 里面也有 Dropout 这节内容.