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])。让我们尝试第二种可能的解决方案(梯度裁剪)。敬请关注。 :)
编辑: 另一种解决方案可能是渐变裁剪,请参阅:
--> 而且这次培训没有成功。损失也在 175 个时期爆炸。
新图片有两种可能的解决方案,但没有解决(但都几乎在同一位置爆炸):
编辑:我也试过批量归一化来避免损失爆炸,但这个尝试也没有成功。
我找到了解决方案:
-我完全重装了python并将学习率改小了(我认为学习率是主要因素),从那以后,再没有发生损失爆炸(现在训练了好几次)。
我连夜训练了一个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])。让我们尝试第二种可能的解决方案(梯度裁剪)。敬请关注。 :)
编辑: 另一种解决方案可能是渐变裁剪,请参阅:
--> 而且这次培训没有成功。损失也在 175 个时期爆炸。
新图片有两种可能的解决方案,但没有解决(但都几乎在同一位置爆炸):
编辑:我也试过批量归一化来避免损失爆炸,但这个尝试也没有成功。
我找到了解决方案:
-我完全重装了python并将学习率改小了(我认为学习率是主要因素),从那以后,再没有发生损失爆炸(现在训练了好几次)。