繁体   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