我正在使用損失函式:
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"]按照建議使用,但它沒有修復它。
uj5u.com熱心網友回復:
您的問題似乎是由批量大小引起的。損失history['val_loss']是按批次計算的。如果您test_features的大小與訓練批次不同,則會給您帶來更大的損失。
你應該試試:
print(meanAbsoluteError(model(test_features[:batch_size]), test_labels[:batch_size]).numpy())
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453225.html
上一篇:為什么我收到此錯誤“圖層“dense_30”的輸入0與圖層不兼容:預期min_ndim=2,發現ndim=1。收到完整形狀:(無,)”
