我正在尝试在keras中训练模型,并使用ModelCheckpoint根据监视的验证指标(在我的情况下为Jaccard index)保存最佳模型。
虽然可以在tensorboard中看到模型的改进,但是当我尝试加载权重并评估模型时,它根本无法工作。此外,通过应该存储权重的文件上的时间戳,我可以知道它们根本没有被保存。时间戳大致对应于我开始训练的时间。
有人遇到过这样的问题吗?
我正在尝试在keras中训练模型,并使用ModelCheckpoint根据监视的验证指标(在我的情况下为Jaccard index)保存最佳模型。
虽然可以在tensorboard中看到模型的改进,但是当我尝试加载权重并评估模型时,它根本无法工作。此外,通过应该存储权重的文件上的时间戳,我可以知道它们根本没有被保存。时间戳大致对应于我开始训练的时间。
有人遇到过这样的问题吗?
Answers:
您是否ModelCheckpoint
使用其默认参数(除外monitor
)?
ModelCheckpoint
有一个名为的参数mode
,用于指定要使用的指标的类型。mode
可以接受3个值,'min'
'max'
并且'auto'
(这是默认值):
min
:表示您想最小化指标(例如损失函数)。max
:表示您想最大化指标(例如准确性)。auto
:尝试自行决定要做什么。如果您查看代码,它将检查度量标准名称是否包含'acc'
或以开头'fmeasure'
。如果是,则将模式设置为max
,否则将其设置为min
。在您的情况下,您需要监视jaccard索引,该索引是您希望最大化的指标,因此您希望将模式设置为max
。通常,因为“ jaccard”包含字符串“ acc”,即使将模式设置为该模式auto
也可以正常工作。
但是,如果您将度量标准命名为任意值(例如my_metric
),则默认模式将设置为min
,这意味着它将存储在度量标准上获得最低性能的权重,该权重应该是第一个时期的权重。
建议:下次尝试mode='max'
确定。
intersection_over_union
,它可能存储了得分最低的权重,这是第一个时期的权重。这很有意义。谢谢!