BN层Dropout层都是为了防止模型过拟合而设计的结构,特别是BN层,在其出现之后模型的表现又上升了一个台阶,但是在实际的使用过程中会发现训练和预测的时候这两个层总是出岔子
那么是什么岔子:
首先来解决好解决的:
1、Dropout层-问题
需要先知道的是Dropout层在训练的时候是随机让一定比例的节点失活,不参与该批次的训练,但是在预测的时候,所有的节点参与预测,只是每个节点的值乘以设置的比例为输出。这样一看认为dropout层的设计很完美,但是仔细看就会有些问题,那就是方差的问题。
我们假设训练集和测试集的数据分布是一样的,那么你想想,如果有两种方式对同一份数据做处理,第一种方式是直接扔到一部分的节点,然后其余节点的输出值的和为最终结果,第二种方式为使用全部的节点,但是使用输出的值乘以某一个比例(0-1之间)的和为最终结果,这只是一个很粗糙的比喻,因此我们就可以认为使用训练时候的方差大于预测时候的方差,那么这时候怎么办呢?有前人给出解决方案了,直接冻结Dropout层,或者冻结大部分层只留全连接层,然后用训练集再训练一两个批次即可。
2、BN层-问题:
keras版本:‘2.1.0’