簡體   English   中英

Keras - 多輸出模型的准確性不起作用

[英]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 是可見的。

所以我的問題是:

  1. val 和 val_loss 是否分別表示模型的整體損失和整體驗證損失?
  2. 是否也可以打印模型的acc?
  1. loss和 val_loss 分別表示模型的整體損失和整體驗證損失嗎?

    是的,它們是訓練和驗證的總體損失。 每個輸出的單個損失根據loss_weights指定的系數進行加權。

  2. 是否也可以打印模型的准確性?

    您可以單獨獲得每個輸出的准確性,但我相信 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM