我可以获得计算张量来连接他们填写我的TensorBoard图的占位符吗?

时间:2016-06-04 21:03:06

标签: machine-learning tensorflow graph-visualization tensorboard

我很困惑如何让我的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图表可视化并没有显示这些"连接起来"。

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

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

enter image description here

但后者不能与前者联系。

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

如果无法将计算值连接到图表,为什么要显示它们?为什么其他计算值正确显示。例如,我计算的动量值,其定义与上述输入的压差值

相同
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))

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

1 个答案:

答案 0 :(得分:1)

  

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

     

这是预期的行为吗?

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

  1. 计算值keep_prob_***_val
  2. 的部分
  3. 您定义占位符的部分keep_prob_***
  4. 图表中未连接第1部分和第2部分。当您调用sess.run(keep_prob_***_val)时,您将创建一个Python对象。然后将该对象提供给图形的第二部分,但图形并不知道它来自第一部分。

      

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

    您可以使用tf.cond()doc)在使用图表第一部分中计算的值或测试值(例如1. 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)
    
      

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

    在这种情况下,您不使用中间占位符,以便图表完全连接!