Keras训练时指标通过update_state聚合是否合理?
TensorFlow Keras指标的
update_state聚合逻辑 大多数TensorFlow Keras模型在训练步骤结束时计算指标,都会通过metric.update_state(metric_value)方法记录指标值。这个方法不会直接覆盖之前的结果,而是根据指标类型,以特定逻辑和历史结果进行聚合。
比如Mean和Sum这两个常用指标的表现差异明显,容易让人对Mean的计算逻辑产生误解:
from tensorflow.keras.metrics import Sum, Mean # Mean指标示例 m = Mean() m.update_state(5) print(m.result()) # 输出5.0(单样本平均值) m.update_state(2) print(m.result()) # 输出3.5((5+2)/2,共2个样本) m.update_state([1, 2]) print(m.result()) # 输出2.5((5+2+1+2)/4,共4个样本) # Sum指标示例 m = Sum() m.update_state(5) print(m.result()) # 输出5.0 m.update_state(2) print(m.result()) # 输出7.0(5+2) m.update_state([1, 2]) print(m.result()) # 输出10.0(7+1+2)
需要明确的是,Mean指标的计算逻辑是累计所有输入样本的总和,除以累计的样本总数,而非每次取当前平均值与新批次平均值再做二次平均。你之前的误解在于第三次计算时错误用(3.5 + (1+2)/2)/2推导,但实际上第三次输入的[1,2]是两个独立样本,累计总和为5+2+1+2=10,累计样本数为1+1+2=4,10/4=2.5才是正确计算方式。这种设计是为了让指标能准确反映整个训练过程的全局平均水平,适配分批训练时多样本输入的场景。
内容的提问来源于stack exchange,提问作者ThreeOrangeOneRed
相关产品推荐
相关产品推荐

