[英]Keras - accuracy for multi-output model is not working
多輸出模型的一個重要問題是,這種模型的訓練需要能夠為網絡的不同頭部(輸出)指定不同的度量。
正如官方文檔中提到的:
要為多輸出模型的不同輸出指定不同的指標,您還可以傳遞一個字典,例如 metrics={'output_a': 'accuracy'}
對於我的模型,我正在做類似的事情:
metrics ={'output_a': 'crossentropy',
'output_b': 'mse',
'output_c': 'mse',
'output_d': 'mse',
'output_e': 'categorical_accuracy'}
但是當我開始訓練模型時,在日志中看不到整體准確度,而損失和 val_loss 是可見的。
所以我的問題是:
loss和 val_loss 分別表示模型的整體損失和整體驗證損失嗎?
是的,它們是訓練和驗證的總體損失。 每個輸出的單個損失根據loss_weights
指定的系數進行加權。
是否也可以打印模型的准確性?
您可以單獨獲得每個輸出的准確性,但我相信 Keras 不支持“整體”指標。 這將需要有關如何匯總各個產出指標的更多信息。
我將回答第二部分,因為第一部分已經回答。
是的,我們可以通過創建自定義回調並覆蓋on_epoch_end
函數來打印驗證准確性。 在on_epoch_end
我們可以訪問logs
,它是 metric_name: values 的字典。
例如 -
我有一個 13 輸出模型。
class CustomCallbacks(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs={}):
val_acc = 0
for i in range(13):
val_acc += (logs.get('val_digit_{}_accuracy'.format(i)))/13 # take mean acc value
print("mean val acc - ",val_acc)
如果您只想跟蹤這些自定義指標,我已經設法通過從ModelCheckpoint
繼承來使其相對簡單地工作
class ModdedModelCheckpoint(keras.callbacks.ModelCheckpoint):
def on_epoch_end(self, epoch, logs={}):
relevantAcc = list(availableOutputs.keys())
accuracies = [logs[f"val_y_{k}_accuracy"] for k in relevantAcc]
print(f"Relevant_Accuracies: {accuracies}")
average = sum(accuracies) / len(relevantAcc)
print(f"Average Accuracies: {average}")
logs["val_y_accuracy"] = average
super(keras.callbacks.ModelCheckpoint, self).on_epoch_end(
epoch, logs=logs
)
在這種情況下,它會根據我的“假” val_y_accuracy
條目來決定是否將最佳模型存儲到logs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.