下面是我使用TensorFlow 1.9的训练曲线:
是什么导致了训练损失的急剧上升?
一些细节:
-
该网络有5层,接收图像,并预测4维向量。
-
训练是用50号的小批来完成的。
-
对于每个纪元,我的整个数据集都是迭代的。因此,尖峰不是由于随机抽样一个“困难”的小批量。
-
我使用Adam优化程序,使用TensorFlow的默认参数,学习率为0.001。
-
输出(和输入)数据标准化为零平均值和标准偏差为1。
-
我已经检查了这些尖峰出现的点,而不是一个高损失的单个训练示例,通常在一个小批量内有几个高损失的训练示例。
作为一个例子,网络对以下两个例子所作的预测是:
[ 33.939026 -69.096344 75.832924 35.009373]
和
[ -87.652336 52.033615 -94.49006 -168.82799 ]
,其中这些示例的标签都是:
[ 2.041661e-02 -4.019599e-01 -1.813140e-04 1.500889e-01]
. 因此,这分别导致了3209和479的损失。
例如,如果损失是“正常”的,典型的预测是:
[ 2.041661e-02 -4.019650e-01 -1.770628e-04 1.500889e-01]
标签为:
[-1.135244 -0.091564 0.46258 -0.078056]
.
因此,似乎突然之间,对一些训练例子的预测有了一个巨大的幅度,然后这个幅度很快就消失到一个更可接受的水平。
你知道是什么引起的,或者我可以怎样调试它吗?