You need to enable JavaScript to run this app. 解决TensorFlow报错:'ResourceSummaryWriter'对象无'add_summary'属性
优惠活动
大模型
产品
解决方案
定价
更多

解决TensorFlow报错:'ResourceSummaryWriter'对象无'add_summary'属性

错误原因

你的代码混用了TensorFlow 1.x和2.x的日志写入接口:通过tf.summary.create_file_writer创建的是TensorFlow 2.x专属的ResourceSummaryWriter对象,而你调用的add_summary是TensorFlow 1.x版本FileWriter对象的专属方法,两个接口不兼容,因此触发属性不存在的报错。

修复方案

提供两种修复方式,你可以按需选择:

方案1:最小改动适配(适合无TensorFlow使用经验的用户)

不需要修改核心业务逻辑,只需要替换summary_writer的初始化代码即可,原来的add_summary调用可以直接正常运行。
将原初始化代码:

self.summary_writer = tf.summary.create_file_writer(train_dir)

替换为兼容TF1接口的初始化代码:

self.summary_writer = tf.compat.v1.summary.FileWriter(train_dir)

方案2:适配TensorFlow 2.x标准规范(长期使用更推荐)

不需要修改初始化代码,只需要调整calc_running_avg_loss函数中的日志写入逻辑,适配TF2的接口规则即可,修改后的完整函数如下:

def calc_running_avg_loss(loss, running_avg_loss, summary_writer, step, decay=0.99):
  if running_avg_loss == 0:  # 首次迭代直接取当前损失值
    running_avg_loss = loss
  else:
    running_avg_loss = running_avg_loss * decay + (1 - decay) * loss
  running_avg_loss = min(running_avg_loss, 12)  # 损失值截断
  tag_name = 'running_avg_loss/decay=%f' % (decay)
  # 替换原TF1版本的日志写入逻辑
  with summary_writer.as_default():
    tf.summary.scalar(tag_name, running_avg_loss, step=step)
  return running_avg_loss

补充说明:你当前的问题表述已经非常清晰,完整提供了报错信息、触发报错的代码片段、依赖的初始化逻辑,足以快速定位问题,不需要额外补充内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:36:04