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

TensorFlow联邦学习无法查看本地epoch输出及精度曲线绘制问题

问题1:输出指标是否为每轮迭代后全局模型的对应指标

不是,两类输出的含义有明确区别:

  • 每次打印的round xx, metrics=xxx内容中的准确率、损失值,是当前联邦轮次下所有客户端完成本地训练后,上报的本地训练指标的加权聚合平均值,仅反映客户端本地训练过程的平均效果,不是聚合更新完成后的全局模型对应指标。
  • 每轮下方输出的1/1 - 1s - loss: xxx - accuracy: xxx内容,是将聚合完成的全局模型权重加载到评估模型后,在验证集上运行评估得到的结果,这部分才是每轮迭代结束后,完成权重更新的全局模型的真实指标。

问题2:不使用TensorBoard绘制全局模型验证精度变化曲线的方法

你现有代码已经在每轮评估时将全局模型的验证精度、验证损失分别存入了tff_val_acc、tff_val_loss列表,不需要依赖TensorBoard,补充记录轮次序列后直接用matplotlib即可绘图,具体实现步骤如下:

  1. 训练启动前导入绘图库,初始化轮次记录列表:
import matplotlib.pyplot as plt
tff_rounds = []
tff_val_acc = []
tff_val_loss = []
  1. 在每轮评估完成、存储验证指标的位置,补充记录当前轮次编号:
ev_result = eval_model.evaluate(x_val, y_val, verbose=2)
tff_rounds.append(round_num)  # 新增行,记录当前联邦轮次
tff_val_acc.append(ev_result[1])
tff_val_loss.append(ev_result[0])
  1. 所有轮次训练全部结束后,执行以下代码即可生成全局模型验证精度变化曲线:
# 绘制验证准确率曲线
plt.figure(figsize=(8, 4))
plt.plot(tff_rounds, tff_val_acc, marker='o', label='验证集准确率')
plt.xlabel('联邦训练轮次')
plt.ylabel('准确率')
plt.title('全局模型验证精度变化曲线')
plt.xticks(tff_rounds)  # x轴刻度与每一轮对齐
plt.legend()
plt.grid(alpha=0.3)
plt.show()

注意:你提到的「10轮训练、每轮包含10个本地epoch」是客户端侧的本地训练配置,全局模型每完成1轮联邦聚合才会更新一次权重,因此全局模型的验证精度序列长度和联邦轮数一致(共10个数据点),不存在100个全局epoch对应的精度点。如果需要查看客户端本地每个epoch的训练指标,需要自定义客户端训练逻辑实现指标上报,TFF默认的迭代过程不会向外抛出本地逐epoch的训练指标。
额外提示:你贴出的核心代码中,for name, value in tff_metrics['train'].items(): 行存在多余缩进,运行时会抛出语法错误,需要调整缩进至与上方train_metrics = tff_metrics['train']行同级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:30:38