75 个时期后损失异常增加(使用 MSE 和二元交叉熵)

Abnormal increase in loss after 75 epochs (Using MSE and Binary Crossentropy)

我连夜训练了一个tensorflow.keras模型,对训练过程感到惊讶(请看附图)。谁能告诉我,是什么东西在训练的时候能产生这样的效果?我已经用 mse(右)和另一个显示的损失(二元交叉熵)进行了训练。 我用 'normal' 个样本训练了一个自动编码器。验证样本是 'anomaly' 个样本。

如果您需要更多信息,请告诉我。

编辑: 我可能找到了原因,但我不确定:我有作为输入数据的特征,它没有严格在 [0,1] 中的值,实际上我几乎所有的值都在 [0,1] 中,但有几个值比 1 大一点。当我用 MSE 训练时,我认为这应该不是问题,但作为参考我也使用了二元交叉熵损失(需要 [0,1] 中的值)。这可能会对培训造成一些刺激。我正在使用:

loss = tensorflow.keras.losses.MeanSquaredError(name='MeanSquaredError')
autoencoder.compile(optimizer=tensorflow.keras.optimizers.Adam(lr=learning_rate), loss=loss, metrics=[tensorflow.keras.metrics.BinaryCrossentropy()])

和 livelossplot:

callbacks=[PlotLossesKeras(outputs=[MatplotlibPlot(figpath=save_string_plot)]),TensorBoard(log_dir="autoencoder\" + string_name_model)],

目前我正在使用 [0,1] 内的特征值重新训练模型。

--> 再训练进行到第 175 个时期然后崩溃了,所以我认为这不是解决方案(将特征严格适应 [0,1])。让我们尝试第二种可能的解决方案(梯度裁剪)。敬请关注。 :)

编辑: 另一种解决方案可能是渐变裁剪,请参阅:

https://neptune.ai/blog/understanding-gradient-clipping-and-how-it-can-fix-exploding-gradients-problem

--> 而且这次培训没有成功。损失也在 175 个时期爆炸。

新图片有两种可能的解决方案,但没有解决(但都几乎在同一位置爆炸):

编辑:我也试过批量归一化来避免损失爆炸,但这个尝试也没有成功。

我找到了解决方案:

-我完全重装了python并将学习率改小了(我认为学习率是主要因素),从那以后,再没有发生损失爆炸(现在训练了好几次)。