【问题标题】:Abnormal increase in loss after 75 epochs (Using MSE and Binary Crossentropy)75 个 epoch 后损失异常增加(使用 MSE 和二元交叉熵)
【发布时间】:2021-09-19 06:21:42
【问题描述】:

我通宵训练了一个 tensorflow.keras 模型,对训练过程感到惊讶(请参见附图)。谁能告诉我,什么可以在训练中产生这样的效果?我已经用 mse(右)和另一种损失(二元交叉熵)进行了训练。 我已经用“正常”样本训练了一个自动编码器。验证样本是“异常”样本。

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

编辑:我可能找到了原因,但我不确定:我有特征作为输入数据,在 [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] 中的特征值重新训练模型。

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

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

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

--> 而且这个训练也没有成功。损失也在 175 个 epoch 时爆发式增长。

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

编辑:我也尝试了批量标准化以避免损失爆炸,但这个尝试也没有成功。

【问题讨论】:

  • 两种可能的解决方案都没有奏效,在这两种情况下(严格在 [0,1] 中的特征和使用 clipnorm = 1 进行梯度裁剪)我得到了几乎相同的训练图(在 epoch 175 左右,损失激增,见图)。

标签: tensorflow keras mse


【解决方案1】:

我找到了解决办法:

-我完全重新安装了python并将学习率改为较小的值(我认为学习率是主要因素),从那时起,不再发生损失爆炸(现在训练了几次)。

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 2020-12-08
    • 2018-03-23
    • 2018-09-12
    • 2018-07-13
    • 2021-08-25
    • 2020-07-23
    • 2018-08-07
    • 2020-03-03
    相关资源
    最近更新 更多