如何在 Keras 中手动计算损失?

原文标题How to compute loss manually in Keras?

我正在使用损失函数:

meanAbsoluteError = tf.keras.losses.MeanAbsoluteError()

还有一个模型:

model.compile(optimizer=tf.keras.optimizers.Adam(0.001), loss=meanAbsoluteError)

现在我训练它并获取历史:

history = model.fit(train_features, train_labels, epochs=100, validation_data=(test_features, test_labels))

我可以检查最后损失有多低:

print(history.history["val_loss"][-1])

现在我尝试手动计算测试数据的损失,使用与训练时传入的数据相同的数据validation_data

print(meanAbsoluteError(model(test_features), test_labels).numpy())

但这给了我一个完全不同的数字!在我看来,这应该等于我从前面的表达式中得到的损失。但事实并非如此。

为什么这两个数字不相等,哪一个是正确的损失?

我在这里检查了如何调用损失函数:https://www.tensorflow.org/api_docs/python/tf/keras/losses/Loss#call

我将其编辑为使用history.history["val_loss"]而不是建议的history.history["loss"],但它没有解决它。

原文链接:https://stackoverflow.com//questions/71671430/how-to-compute-loss-manually-in-keras

回复

我来回复
  • LeonardoVaz的头像
    LeonardoVaz 评论

    你的问题好像是batch size造成的。history['val_loss']中的loss是按batch计算的。如果你的test_features大小和你的training batch不同,就会给你更大的loss。

    你应该试试:

    print(meanAbsoluteError(model(test_features[:batch_size]), test_labels[:batch_size]).numpy())
    
    2年前 0条评论