全连接神经网络(FCN)学习笔记(为什么过拟合)

多层神经网络和**函数前面章节已经讲过了,我觉得有点重复,咨询老师为什么要这样做,老师说很多童鞋并不是能够每天坚持学习,有很多童鞋一开始学习了几天,就放下不学了,等到下次要再学时有可能是一个星期,两个星期,甚至一个月,前面的东东有可能都忘了,而本课程一开始前几章节是基础,是非常重要的尤其是深度学习原理,关系到后续章节你是否能学懂,所以才设置重复的课程。
Mnist多层分类视频学习笔记:
此视频中讲解与Mnist分类不同的就是加入了两个网络层,两个网络层都用RELU**函数对每层网络所提取的特征值进行**。损失函数使用tf.nn.softmax_cross_entropy_with_logits,梯度下降优化使用了 tf.train.AdamOptimizer,其它代码都是延用Mnist分类代码,但就是这些改变就明显带来了模型精度提升到了95%比Mnist分类代码提升了12个点。

过拟合学习笔记:

过拟合学习我花了好多时间在学习matplotlib,sklear上,大概花我有1天的时间在这上面,主要是查找导入的plt,shuffle、colorConverter、ListedColormap的用法。
一开始我不明白为什么会过拟合呢,为什么我们训练好的模型在实际中就用不上呢?这个在视频中也没有讲解,咨询老师,老师回复说主要有以下四点吧:

  1. 训练集和测试集的数据特征分布不一样,说白了就是神经网络根本没从训练集上学到测试集上的特征,到实战时自然就出现过拟合。

  2. 训练集的数据相对于真实应用场景,太小了,其实还是训练集和测试集的数据特征分布不一样。

  3. 训练集中的异常数据过多,模型训练学习时把这些异常数据特征也学到了,反而把正常数据的特征给掩盖了。

  4. 网络训练学习的次数过多,反而让网络学习到了很多次异常数据特征,而对正常数据特征造成了干扰。如果要避免这种现象就要根据模型学习的精度在循环学习了几轮之后没有什么变化的前提下,停止训练,这也是为什么未必最后一个保存的模型是最好的原因。

理解了上面四点之后,就明白了为什么正则化、增大数据集、DropOut能够避免过拟合了。

全连接神经网络(FCN)学习笔记(为什么过拟合)

全连接神经网络(FCN)学习笔记(为什么过拟合)

增大数据集就是解决训练数据特征不能覆盖真实场景的特征要求,即不能覆盖测试集数据特征要求。
DropOut,正则化就是解决异常数据特征带来的问题。

有了这些知识看代码就水到渠成了,在调试跟踪代码的过程中我对这行代码一直不理解,X, Y = shuffle(X0, Y0),为什么要随机打乱呢?
问老师,老师回答这是数据准备的常规动作,如果不打乱,模型可能会学习到一种特定的数据先后顺序特征,而训练又是迭代循环多次,总是学一种先后顺序排列肯定是不合适的,应该随机打乱,更有利于模型学习。