logging - 为什么我的馈送 TensorFlow 占位符值被替换为计算值?

标签 logging machine-learning tensorflow

我使用定义了一些计算值和关联的摘要

keep_prob_val = tf.sub(1.0, tf.train.exponential_decay(1 - FLAGS.keep_prob, global_step, FLAGS.decay_steps,                                                        FLAGS.dropout_decay_rate, staircase=False))
keep_prob_summary = tf.scalar_summary('params/keep_prob', keep_prob_val)

并设置一些合并摘要

train_writer = tf.train.SummaryWriter(FLAGS.train_dir.format(log_id), tf.get_default_graph())
test_writer = tf.train.SummaryWriter(test_dir)
merged = tf.merge_all_summaries()

但是当我随后

sess.run(train_step, feed_dict={x: xs, y_: ys,
                                keep_prob: sess.run(keep_prob_val)})
# ...
test_writer.add_summary(sess.run(merged, feed_dict={ ..., keep_prob: some_val}), 
                        global_step=gs)

其中 keep_prob 先前已定义为

keep_prob = tf.placeholder(tf.float32, name='keep_prob')

我得到的摘要信息是计算出的keep_prob_val,而不是我输入的some_val。即使如预期的那样,如果我省略显式提供 keep_prob,也会发生这种情况,我会收到错误。

据我所知,这种情况仅发生在涉及 keep_prob 的摘要中。例如,当我
sess.run(accuracy, feed_dict={ ..., keep_prob: some_val})

我似乎使用 some_val 计算出准确度,这对应于相关的摘要。

为什么我的摘要中忽略了 keep_prob 的反馈值?

最佳答案

摘要不取决于您的 keep_prob 占位符,而是取决于 FLAGS.keep_prob 值:

keep_prob_val = tf.sub(1.0, tf.train.exponential_decay(
    1 - FLAGS.keep_prob, global_step, FLAGS.decay_steps,                
    FLAGS.dropout_decay_rate, staircase=False))

keep_prob_summary = tf.scalar_summary('params/keep_prob', keep_prob_val)

因此,您的摘要将始终包含由 --keep_prob 标志设置的(可能已衰减的)值(或其默认值)。

要使摘要反射(reflect)馈送值,您只需重新定义 keep_prob_valkeep_prob_summary 以取决于占位符:

keep_prob = tf.placeholder(tf.float32, name='keep_prob')

# ...

keep_prob_val = tf.sub(1.0, tf.train.exponential_decay(
    1 - keep_prob,  # N.B. Critical change goes here!
    global_step, FLAGS.decay_steps, FLAGS.dropout_decay_rate, staircase=False))

keep_prob_summary = tf.scalar_summary('params/keep_prob', keep_prob_val)

关于logging - 为什么我的馈送 TensorFlow 占位符值被替换为计算值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37530152/

相关文章:

java - @SLF4J : How to configure lombok supported slf4j

machine-learning - Q 学习网格世界场景

python - 使用 Python 实例化 TensorFlow 模型时出现 google.protobuf.text_format.ParseError

algorithm - 深度学习,关于使用哪种架构的建议

machine-learning - SVM分类中的特征选择——怪异行为

tensorflow - 如何在tensorflow keras中使用CRF?

python - 如何在 Tensorflow 中设置损失操作的名称?

postgresql - 错误、系统查询、Postgresql 查询调试的不同日志文件

java - 如何从JAVA文件中获取日志

纯文本的Java日志