[英]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.