You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tensorboard add_scalar在for循环中仅记录最后一个值的问题排查

问题原因

TensorBoard的add_scalar方法中,第三个参数global_step的设计初衷是记录训练过程中的整数迭代步数,而非自定义的浮点型阈值。当你传入浮点数作为global_step时,TensorBoard内部对数据的索引和渲染逻辑会出现异常,导致多个数据点无法被正确识别和展示,最终只保留最后一个写入的数据。

解决方法

以下两种方案可以解决这个问题:

方案1:将阈值作为Tag的一部分

把每个阈值对应的准确率作为独立的曲线条目,用固定的整数(比如当前训练轮次epoch)作为global_step:

# 假设当前训练轮次为epoch,也可以用0这类固定值
epoch = 5
for threshold, acc in eval_metrics['accuracy'].items():
    writer.add_scalar(f'acc/threshold_{threshold}', acc, global_step=epoch)

这样在TensorBoard的标量面板中,你会看到以acc/threshold_0.2、acc/threshold_0.4命名的多个曲线,每个曲线对应一个阈值的准确率。

方案2:将阈值转换为整数步长

如果希望把阈值作为横轴展示,可以将浮点型阈值转换为整数(比如乘以10放大),作为global_step传入:

for threshold, acc in eval_metrics['accuracy'].items():
    # 将阈值放大10倍转为整数,避免浮点型step的问题
    step = int(threshold * 10)
    writer.add_scalar('acc', acc, global_step=step)

此时TensorBoard的横轴会显示2、4、6、8,对应原阈值0.2、0.4、0.6、0.8,所有数据点都会被正确渲染。

额外注意事项

写完所有数据后,务必调用以下方法确保数据被写入磁盘:

writer.flush()
writer.close()

内容的提问来源于stack exchange,提问作者Jonicorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:15:39