0

我很困惑如何让我的 TensorBoard 图形可视化来捕捉我将计算值提供给我的一些占位符的事实。

我已经定义了占位符

with tf.name_scope('params'):
    keep_prob_later = tf.placeholder(tf.float32, name='keep_prob_later')
    keep_prob_early = tf.placeholder(tf.float32, name='keep_prob_early')
    keep_prob_input = tf.placeholder(tf.float32, name='keep_prob_input')

以及用于计算其值的相应张量

with tf.name_scope('param_vals'):    
    with tf.name_scope('keep_prob_later_val'):
        keep_prob_later_val = tf.sub(1.0, tf.train.exponential_decay(1 - FLAGS.keep_prob_later, global_step,
                                                                     FLAGS.decay_steps,
                                                                     FLAGS.dropout_decay_rate, staircase=False))
    with tf.name_scope('keep_prob_early_val'):
        keep_prob_early_val = tf.sub(1.0, tf.train.exponential_decay(1 - FLAGS.keep_prob_early, global_step,
                                                                     FLAGS.decay_steps,
                                                                     FLAGS.dropout_decay_rate, staircase=False))
    with tf.name_scope('keep_prob_input_val'):
        keep_prob_input_val = tf.sub(1.0, tf.train.exponential_decay(1 - FLAGS.keep_prob_input, global_step,
                                                                     FLAGS.decay_steps,
                                                                     FLAGS.dropout_decay_rate, staircase=False))

然后我在训练我的模型时喂它

sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys,
                                keep_prob_later: sess.run(keep_prob_later_val),
                                keep_prob_early: sess.run(keep_prob_early_val),
                                keep_prob_input: sess.run(keep_prob_input_val)})

但我的 TensorBoard 图形可视化并没有显示这些“挂钩”。

我看到占位符正确连接到我的图表的其余部分

我也看到了所有相应的计算值

在此处输入图像描述

但后者不连接到前者。

这是预期的行为吗?有没有办法在我的图表的 TensorBoard 可视化中捕获计算值用于填充相应占位符的事实?


如果无法将计算值连接到图形,为什么要显示它们?以及为什么其他计算值正确显示。例如,我计算的动量值,它的定义就像上面的 feed dropout 值一样

with tf.name_scope('param_vals'):
    with tf.name_scope('momentum_val'):
        momentum_val = tf.sub(1.0, tf.train.exponential_decay(1 - FLAGS.initial_momentum, global_step,
                                                          FLAGS.decay_steps, FLAGS.momentum_decay_rate,
                                                          staircase=False))

确实显示连接到他们影响的图表的所有部分。

4

1 回答 1

1

我看到占位符正确连接到我的图表的其余部分,并且我也看到了所有相应的计算值,但后者不连接到前者。

这是预期的行为吗?

确实,这是正确的行为。您的图表分为两部分:

  1. 计算值的部分keep_prob_***_val
  2. 定义占位符的部分keep_prob_***

第 1 部分和第 2 部分在图中未连接。当你调用 时sess.run(keep_prob_***_val),你创建了一个 Python 对象。然后将该对象馈送到图的第二部分,但图不知道它来自第一部分。


有没有办法在我的图表的 TensorBoard 可视化中捕获计算值用于填充相应占位符的事实?

您可以使用tf.cond()( doc ) 在使用图表第一部分中计算的值或测试值(如1.for keep_prob)之间进行选择:

is_train = tf.placeholder(tf.bool, [])

def when_train():
    return keep_prob_late_val

def when_not_train():
    return 1.

keep_prob_later = tf.cond(is_train, when_train, when_not_train)

以及为什么其他计算值正确显示。例如,我计算出的动量值,其定义就像上面输入的 dropout 值一样,确实显示出与它们影响的图形的所有部分相关联。

在这种情况下,您不使用中间占位符,因此图是完全连接的!

于 2016-06-05T14:20:28.410 回答