Keras 历史回调损失与损失的控制台输出不匹配

问题描述 投票:0回答:1

我目前正在 Keras 中训练 CNN。 现在我想记录训练过程的历史记录以供以后可视化使用:

history_callback = model.fit(train_generator,
      steps_per_epoch=EPOCH_STEP_TRAIN,
      validation_data=test_generator,
      validation_steps=EPOCH_STEP_TEST,
      epochs=NUM_OF_EPOCHS,
      callbacks=callbacks)

val_loss_history = history_callback.history['val_loss']
loss_history = history_callback.history['loss']

numpy_val_loss_history = np.array(val_loss_history)
numpy_loss_history = np.array(loss_history)

np.savetxt(checkpoint_folder + "valid_loss_history.txt", numpy_val_loss_history, delimiter=",")
np.savetxt(checkpoint_folder + "loss_history.txt", numpy_loss_history, delimiter=",")

验证损失已正确保存并且与控制台的输出完全匹配。

但是我存储的损失值在训练时与控制台的输出值不匹配。请看这里:

121/121 [==============================] - 61s 438ms/step - loss: 0.9004 - recall: 0.5097 - precision: 0.0292 - acc: 0.8391 - val_loss: 0.8893 - val_recall: 0.0000e+00 - val_precision: 0.0000e+00 - val_acc: 0.9995
Epoch 2/3
121/121 [==============================] - 52s 428ms/step - loss: 0.5830 - recall: 0.1916 - precision: 0.3660 - acc: 0.9898 - val_loss: 0.5422 - val_recall: 0.3007 - val_precision: 0.7646 - val_acc: 0.9996
Epoch 3/3
121/121 [==============================] - 52s 428ms/step - loss: 0.3116 - recall: 0.3740 - precision: 0.7848 - acc: 0.9920 - val_loss: 0.5248 - val_recall: 0.3119 - val_precision: 0.6915 - val_acc: 0.9996

history_callback.history['loss'] 的输出是:

0.8124346733093262 
0.4653359651565552 
0.30956554412841797

我的损失函数是:

def dice_coef(y_true, y_pred, smooth=1e-9):
    y_true_f = K.flatten(y_true)
    y_pred_f = K.flatten(y_pred)
    intersection = K.sum(y_true_f * y_pred_f)
    return (2. * intersection + smooth) / (K.sum(y_true_f**2) + K.sum(y_pred_f**2) + smooth)

def dice_loss(y_true, y_pred):
    return (1-dice_coef(y_true, y_pred))

我也尝试过:

def dice_loss(y_true, y_pred):
        return tf.reduce_mean(1-dice_coef(y_true, y_pred))

这并没有改变任何事情。

有没有人可以解释这种奇怪的行为?

python tensorflow keras history
1个回答
-2
投票

好像我也遇到了同样的问题。

我们的共同点是TF 版本 2.4.1(CUDA 11.2、Windows 10 Pro、Quadro T1000)。

当我使用 TF 版本 2.8.0(CUDA 11.4、Debian 10、Tesla T4)使用相同数据训练相同网络时,问题消失了

我们唯一的共同点是我们都使用 CNN。

© www.soinside.com 2019 - 2024. All rights reserved.