2016-01-31 7 views
2

кодов, производит AEКак можно закодировать feed_dict

x = tf.placeholder(tf.float32, [None, 784]) 
keep_prob = tf.placeholder("float") 

for step in range(2000): 
    batch_xs, batch_ys = mnist.train.next_batch(BATCH_SIZE) 
    sess.run(train_step, feed_dict={x: batch_xs, keep_prob: (1 - DROP_OUT_RATE) }) # feed_dict 
    if step % 10 == 0: 
     summary_op = tf.merge_all_summaries() 
     summary_str = sess.run(summary_op, feed_dict={x: batch_xs, keep_prob: 1.0}) 
     summary_writer.add_summary(summary_str, step) 
    if step % 100 == 0: 
     print(loss,eval(session=sess, feed_dict={x: batch_xs, keep_prob: 1.0})) 

Что я получил в качестве сообщения

InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder' with dtype float 
    [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

в журнале ошибки

File "<ipython-input-9-c70541b6146b>", line 18, in <module> 
    x = tf.placeholder(tf.float32, [None, 784]) 

Я не знаю, что мне нужно делать. Мне кажется, что коды действительны.

+0

Я думаю, что обычно python создает float64 по умолчанию. Так что, если ваш float3 по умолчанию - float32, он не будет работать. Может быть, попробуйте явно подавать float32 там, где у вас (1 DROP_OUT_RATE)? –

+0

Возможный дубликат [Невозможно использовать систему сводок тензорного потока] (http://stackoverflow.com/questions/35114376/cannot-use-tensorflow-summary-system) – mrry

ответ

1

Проблема здесь почти наверняка заключается в вызове tf.merge_all_summaries(), который не очень хорошо работает с использованием интерактивного (например, IPython). Возможно, неинтуитивно, tf.merge_all_summaries() добавляет новую операцию в график, который зависит от всех резюме, которые были созданы на том же графике. Когда вы используете IPython, график будет помнить все созданные вами сводки, даже в предыдущих исполнениях одной и той же ячейки. Это может привести к tf.merge_all_summaries(), создавая тензор, который зависит от tf.placeholder(), созданного при предыдущем выполнении ячейки.

Есть два основных способа решения этого, как я описал в another answer:

  1. Явное объединить резюме, которые вы хотите, чтобы вычислить, используя tf.merge_summary([summary_1, summary_2, summary_3]).

  2. Создайте свой график в явном блоке with tf.Graph().as_default():, который обеспечит включение только сумм, созданных в этом блоке в слияние.

Отметим также, что tf.merge_all_summaries()добавляет новый оп на графике каждый раз, когда вы запустите его. Это означает, что ваша тренировочная петля имеет тонкую утечку памяти и добавит 200 копий того же op к графику. Чтобы этого избежать, вы должны позвонить tf.merge_all_summaries() за пределы вашего цикла обучения и кэшировать полученный тензор. Затем вы можете использовать этот тензор в цикле обучения, чтобы получить тот же результат.

Смежные вопросы