0%

深度学习训练基本经验

1.在各个隐藏层和激活函数之间加入Batch Normalization层可以大大缩短训练时间,而且还存在隐藏效果,比如出现还可以改善效果。

调用:

​ Normalization(num_features)

参数设置:

​ CNN后接Batch Normalization: nums_feeatures为CNN感受野个数(即输出深度)

​ 全连接层后接Batch Normalization:num_features为输出的特征个数

2.Batch Normalization和Dropout层不要一起使用,因为BN以及具备了dropout的效果,一起使用不但起不到效果,而且会产生副作用

常见副作用:

​ 1.只能使用特别小的速率进行训练,使用较大的速率进行训练时,出现梯度消失,无法进行下降

​ 2.最终与训练集拟合程度不高,例如与训练集的拟合程度只能达到90%

若一定要将dropout和BN一起使用,那么可以采用下面方式:

​ 1.将dropout放在BN后面进行使用

​ 2.修改Dropout公式(如高斯Dropout),使其对对方差不那么敏感

总体思路:降低方差偏移

3.深度学习不收敛问题

​ 1.最常见的原因可能是由于学习速率设置的过大,这种情况一般先准确率不断上升,然后就开始震荡

​ 2.当训练样本较小,而向量空间较大时,也可能会产生不收敛问题,这种情况一般从一开始就开始震荡,机会没有准确率上升的过程

​ 3.训练网络问题。当面对的问题比较复杂,而使用的网络较浅时,可能会产生无法收敛问题

​ 4.数据没有进行归一化。数据输入模型之前如果没有进行归一化,很有可能会产生收敛慢或者无法进行收敛的问题

注意:收敛与否主要是看损失函数是否还在下降,而不是准确率是否还在上升,存在很多情况损失函数在迭代过程中还是在不断地下降,但是准确率基本上处于停滞状态,这种情况也是一种未完全拟合的表现,经过一段时间损失函数的下降后准确率还可能会迎来较大的提升