Jak*_*old 13 python tensorflow tensorboard
我在理解新tf.contrib.summaryAPI时遇到了一些麻烦.在旧版本中,似乎所有人应该做的就是运行tf.summary.merge_all()并运行它作为操作.
但现在我们有类似的东西tf.contrib.summary.record_summaries_every_n_global_steps,可以像这样使用:
import tensorflow.contrib.summary as tfsum
summary_writer = tfsum.create_file_writer(logdir, flush_millis=3000)
summaries = []
# First we create one summary which runs every n global steps
with summary_writer.as_default(), tfsum.record_summaries_every_n_global_steps(30):
summaries.append(tfsum.scalar("train/loss", loss))
# And then one that runs every single time?
with summary_writer.as_default(), tfsum.always_record_summaries():
summaries.append(tfsum.scalar("train/accuracy", accuracy))
# Then create an optimizer which uses a global step
step = tf.create_global_step()
train = tf.train.AdamOptimizer().minimize(loss, global_step=step)
Run Code Online (Sandbox Code Playgroud)
现在来几个问题:
session.run(summaries)在一个循环中运行,我假设准确性摘要每次都会被写入,而丢失则不会,因为只有在全局步骤被30整除时它才被写入?session.run([accuracy, summaries])但只能运行,session.run(summaries)因为它们在图形中具有依赖性,对吧?tf.contrib.summary.scalar(和其他人)接受step参数?通过在3)中添加控件依赖项,我的意思是这样做:
tf.control_dependencies(summaries):
train = tf.train.AdamOptimizer().minimize(loss, global_step=step)
Run Code Online (Sandbox Code Playgroud)
编辑:我只是稍微玩了一下,似乎如果一个人tf.control_dependencies与tf.record_summaries_every_n_global_steps它结合起来就像预期的那样行事,而且每个第n步都会记录摘要.但是如果它们在一个会话中一起运行,例如session.run([train, summs]),摘要每隔一段时间就存储一次,但不是每一步都存储.我用n = 2测试了这个,而第二种方法的摘要通常是在奇数步骤中编写的,而使用控制依赖方法,它总是在偶数步骤上.
根据要求,答案从编辑移至自我回答
我只是稍微玩了一下,似乎如果tf.control_dependencies与tf.record_summaries_every_n_global_steps它结合起来就会按预期运行,并且每第 n 步才会记录摘要。但是,如果它们在一个会话中一起运行,例如session.run([train, summs]),则每隔一段时间就会存储一次摘要,但不是每第 n 步就存储一次。我用 n=2 对此进行了测试,使用第二种方法时,摘要通常以奇数步骤编写,而使用控制依赖方法时,它始终以偶数步骤编写。