2016-05-30 40 views
0

我定義使用爲什麼我的fed 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}) 

我似乎得到一個accuracy使用some_val計算,與此相對應的相關總結。

爲什麼我的彙總值中忽略了keep_prob的值?

回答

1

摘要不依賴於你的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標誌設置(可能是腐朽)值(或其默認值)。

爲了使彙總反映美聯儲值,你應該簡單地重新定義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) 
+0

哇,真是一個愚蠢的錯誤! (有沒有一個習慣用法或風格的指南來命名'tf.Tensor' vs'tf.Placeholder' vs普通的python變量,這是我第二次被類似的東西所捕獲,並且明確地標記爲一個或另一個會很有幫助,但我不想隨機編寫一些東西。) – orome

相關問題