我很困惑如何让我的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可视化中捕获计算值用于填充相应占位符的事实?
如果无法将计算值连接到图表,为什么要显示它们?为什么其他计算值正确显示。例如,我计算的动量值,其定义与上述输入的压差值
相同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))
显示连接到他们影响的图表的所有部分。
答案 0 :(得分:1)
我看到占位符正确连接到我的图表的其余部分,我也看到了所有相应的计算值,但后者没有连接到前者。
这是预期的行为吗?
确实这是正确的行为。您的图表分为两部分:
keep_prob_***_val
keep_prob_***
图表中未连接第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)
为什么其他计算值正确显示。例如,我计算出的动量值,就像上面输入的丢失值一样,确实显示出与它们影响的图形的所有部分相关联。
在这种情况下,您不使用中间占位符,以便图表完全连接!