解决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
相关产品推荐
相关产品推荐

