返回before 2016-11-30我可以使用类似下面的TensorFlow / TensorBoard代码创建一个包含变量& global_step_at_epoch'这显示了我的模型运行的每个时代达到的全球步骤。
但是,如果将scalar_summary
替换为summary.scalar
,如下所示,我会为每个纪元获得一个新的范围。因此,在完成n
个时期之后,我会获得范围和TensorBoard面板,以获得' global_step_at_epoch' global_step_at_epoch_1' global_step_at_epoch_2',... 。' global_step_at_epoch_n',每个都有一个点。
如何从scalar_summary
迁移到summary.scalar
,以便下面的代码(或类似代码)生成将所有单个范围合并为一个,因为scalar_summary
用于办?
global_step = tf.Variable(0, trainable=False, name='global_step')
test_writer = tf.summary.FileWriter(...)
with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
log_device_placement=FLAGS.log_device_placement)) as sess:
sess.run(tf.initialize_all_variables())
test_writer.add_summary(sess.run(tf.summary.scalar('global_step_at_epoch', 0)), 0)
for ep in range(epochs):
mini_batches = ...
for mini_batch in mini_batches:
gs = int(sess.run(global_step))
test_writer.add_summary(sess.run(tf.summary.scalar('global_step_at_epoch', gs)), ep + 1)
答案 0 :(得分:1)
我不确定它以前是如何工作的,但是目前使用摘要与其他节点的使用非常一致,因为你在构建阶段创建了一次摘要,然后在一个构建阶段重复调用它。培训期间Session
。
将此应用于您的示例,这可能会给出:
global_step = tf.Variable(0, trainable=False, name='global_step')
test_writer = tf.summary.FileWriter(...)
# create summary op once here
gs_summary = tf.summary.scalar('global_step_at_epoch', global_step)
with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
log_device_placement=FLAGS.log_device_placement)) as sess:
sess.run(tf.initialize_all_variables())
test_writer.add_summary(sess.run(gs_summary), 0)
for ep in range(epochs):
mini_batches = ...
for mini_batch in mini_batches:
gs = int(sess.run(global_step))
test_writer.add_summary(sess.run(gs_summary), ep + 1)
答案 1 :(得分:0)
这已经可以通过tf.name_scope
上下文管理器完成,方法是在第一次使用管理器时命名管理器,当您希望将新项目添加到现有范围时再次起诉它(没有"扩散& #34):
with tf.name_scope('foo') as a_scope:
# some graph elements A
# Elsewhere ...
with tf.name_scope(a_scope):
# additional graph elements B
这会将A和B元素放在一个范围'foo'
中,而
with tf.name_scope('foo') as:
# some graph elements A
with tf.name_scope('foo'):
# additional graph elements B
会将元素分别放在不同的范围foo
和foo_1
中。