首页 > 解决方案 > Tensorboard 摘要卡在 0

问题描述

我在任何地方都没有找到这个;我不能完全理解如何在 Tensorboard 中添加标量摘要,所以我决定做一个我想到的最基本的例子,一行。这是我的代码:

import tensorflow as tf
import numpy as np

x = tf.Variable(0, dtype=tf.float32)

tf.summary.scalar("X", x)

init = tf.global_variables_initializer()
with tf.Session() as sess: 
    writer = tf.summary.FileWriter('./logs', sess.graph)
    sess.run(init)
    for i in range(1, 11):
        merge = tf.summary.merge_all()

        x = tf.add(x, 1)

        summary, x = sess.run([merge, x])

        writer.add_summary(summary, i)
    print("X = ", x)

无论我尝试更改什么,当我打开 Tensorboard 时,标量摘要都保持为 0。也许我不明白摘要是什么?也许我创造它错了?老实说,我不知道。任何有关 Tensorboard 摘要的可靠文档也将不胜感激。谢谢你。

汇总结果图片

标签: pythontensorboard

解决方案


x = tf.add(x, 1)意味着现在一个 python 变量x将引用一个的张量,其值比以前的张量大 1 x。所以在第 3 行创建的变量——比如说Variable:0——将保持不变,不会被更新,它的值仍然是 0。你在每个循环步骤中创建一个新的张量。由于摘要仍然引用值始终为 0的变量Variable:0x,而不是,因此结果行为是正确的。

你应该这样做:

import tensorflow as tf
import numpy as np

x = tf.Variable(0, dtype=tf.float32)

tf.summary.scalar("X", x)

increment_op = x.assign_add(1)        # <------- here
summary_op = tf.summary.merge_all()   # <------- watch this too 

init = tf.global_variables_initializer()
with tf.Session() as sess: 
    writer = tf.summary.FileWriter('./logs', sess.graph)
    sess.run(init)
    for i in range(1, 11):

        summary, x = sess.run([summary_op, increment_op])     # <----- here

        writer.add_summary(summary, i)
    print("X = ", x)

另外,请确保在循环期间不要创建不必要的张量(例如合并摘要)。所以动态创建tf.summary.merge_all() 也是错误的。


推荐阅读