【发布时间】: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])。让我们尝试第二种可能的解决方案(渐变剪裁)。敬请关注。 :)
编辑:另一种解决方案可能是渐变剪裁,请参阅:
--> 而且这个训练也没有成功。损失也在 175 个 epoch 时爆发式增长。
新图片包含两种可能的解决方案,但都没有成功(但两者几乎在同一位置爆炸):
编辑:我也尝试了批量标准化以避免损失爆炸,但这个尝试也没有成功。
【问题讨论】:
-
两种可能的解决方案都没有奏效,在这两种情况下(严格在 [0,1] 中的特征和使用 clipnorm = 1 进行梯度裁剪)我得到了几乎相同的训练图(在 epoch 175 左右,损失激增,见图)。
标签: tensorflow keras mse