多输出模型的一个重要问题是,对这种模型的培训需要能够为网络的不同头(输出)指定不同的度量。
正如官方文件中所述:
要为多输出模型的不同输出指定不同的指标,您还可以传递字典,例如metrics = {' output_a':'准确度'}
对于我的模型,我正在做类似的事情:
metrics ={'output_a': 'crossentropy',
'output_b': 'mse',
'output_c': 'mse',
'output_d': 'mse',
'output_e': 'categorical_accuracy'}
但是当我开始训练模型时,在日志中无法看到整体精确度,而损失和val_loss是可见的。
所以我的问题是:
答案 0 :(得分:1)
丢失和val_loss分别意味着模型的整体损失和整体验证损失?
是的,他们是整体损失的培训和验证。根据{{1}}。
是否也可以打印模型的准确性?
您可以单独获得每个输出的准确度,但我相信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
条目决定是否存储最佳模型