Keras - 多输出模型的准确性无效

时间:2018-05-26 09:44:52

标签: python keras

多输出模型的一个重要问题是,对这种模型的培训需要能够为网络的不同头(输出)指定不同的度量。

正如官方文件中所述:

  

要为多输出模型的不同输出指定不同的指标,您还可以传递字典,例如metrics = {' output_a':'准​​确度'}

对于我的模型,我正在做类似的事情:

metrics ={'output_a': 'crossentropy',
          'output_b': 'mse',
          'output_c': 'mse',
          'output_d': 'mse',
          'output_e': 'categorical_accuracy'}

但是当我开始训练模型时,在日志中无法看到整体精确度,而损失和val_loss是可见的。

所以我的问题是:

  1. val和val_loss是否分别暗示了模型的整体损失和整体验证损失?
  2. 是否可以打印模型的印刷品?

3 个答案:

答案 0 :(得分:1)

  1. 丢失和val_loss分别意味着模型的整体损失和整体验证损失?

    是的,他们是整体损失的培训和验证。根据{{​​1}}。

  2. 中指定的系数对每个输出的单个损失进行加权
  3. 是否也可以打印模型的准确性?

    您可以单独获得每个输出的准确度,但我相信Keras不支持“整体”指标。这将需要有关如何汇总各个输出指标的更多信息。

答案 1 :(得分:0)

我将回答第二部分,因为已经回答了第一部分。

是的,我们可以通过创建自定义回调并覆盖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)

答案 2 :(得分:0)

如果您只想跟踪这些自定义指标,我已经通过继承 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 条目决定是否存储最佳模型