python - Tensorflow:提要字典错误:您必须为占位符张量提供一个值

标签 python tensorflow deep-learning

我有一个错误,我找不到原因。这是代码:

with tf.Graph().as_default():
        global_step = tf.Variable(0, trainable=False)

        images = tf.placeholder(tf.float32, shape = [FLAGS.batch_size,33,33,1])
        labels = tf.placeholder(tf.float32, shape = [FLAGS.batch_size,21,21,1])

        logits = inference(images)
        losses = loss(logits, labels)
        train_op = train(losses, global_step)
        saver = tf.train.Saver(tf.all_variables())
        summary_op = tf.merge_all_summaries()
        init = tf.initialize_all_variables()

        sess = tf.Session()
        sess.run(init)                                                 

        summary_writer = tf.train.SummaryWriter(FLAGS.train_dir, sess.graph)

        for step in xrange(FLAGS.max_steps):
            start_time = time.time()

            data_batch, label_batch = SRCNN_inputs.next_batch(np_data, np_label,
                                                              FLAGS.batch_size)


            _, loss_value = sess.run([train_op, losses], feed_dict={images: data_batch, labels: label_batch})

            duration = time.time() - start_time

def next_batch(np_data, np_label, batchsize, 
               training_number = NUM_EXAMPLES_PER_EPOCH_TRAIN):

    perm = np.arange(training_number)
    np.random.shuffle(perm)
    data = np_data[perm]
    label = np_label[perm]
    data_batch = data[0:batchsize,:]
    label_batch = label[0:batchsize,:]


return data_batch, label_batch

其中np_data是从hdf5文件中读取的全部训练样本,np_label同理。

运行代码后,出现如下错误:

2016-07-07 11:16:36.900831: step 0, loss = 55.22 (218.9 examples/sec; 0.585 sec/batch)
Traceback (most recent call last):

  File "<ipython-input-1-19672e1f8f12>", line 1, in <module>
    runfile('/home/kang/Documents/work_code_PC1/tf_SRCNN/SRCNN_train.py', wdir='/home/kang/Documents/work_code_PC1/tf_SRCNN')

  File "/usr/lib/python3/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 685, in runfile
    execfile(filename, namespace)

  File "/usr/lib/python3/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 85, in execfile
    exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)

  File "/home/kang/Documents/work_code_PC1/tf_SRCNN/SRCNN_train.py", line 155, in <module>
    train_test()

  File "/home/kang/Documents/work_code_PC1/tf_SRCNN/SRCNN_train.py", line 146, in train_test
    summary_str = sess.run(summary_op)

  File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 372, in run
    run_metadata_ptr)

  File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 636, in _run
    feed_dict_string, options, run_metadata)

  File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 708, in _do_run
    target_list, options, run_metadata)

  File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 728, in _do_call
    raise type(e)(node_def, op, message)

InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder' with dtype float and shape [128,33,33,1]
     [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[128,33,33,1], _device="/job:localhost/replica:0/task:0/gpu:0"]()]]
     [[Node: truediv/_74 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_56_truediv", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
Caused by op 'Placeholder', defined at:

所以,它表明对于第 0 步它有结果,这意味着数据已被输入到占位符中。

但是为什么下次往Placeholder feed data的时候会报错呢?

当我尝试注释代码 summary_op = tf.merge_all_summaries() 并且代码工作正常。为什么会这样?

最佳答案

When I try to comment the code summary_op = tf.merge_all_summaries() and the code works fine. why is it the case?

summary_op 是一个操作。如果存在(在您的情况下确实如此)与取决于占位符值的另一个操作的结果相关的汇总操作,则您必须为图形提供所需的值。

因此,您的代码行 summary_str = sess.run(summary_op) 需要要存储值的字典。

通常,您不是重新执行操作来记录值,而是运行一次操作 summary_op。

做类似的事情

if step % LOGGING_TIME_STEP == 0:
    _, loss_value, summary_str = sess.run([train_op, losses, summary_op], feed_dict={images: data_batch, labels: label_batch})
else:
    _, loss_value = sess.run([train_op, losses], feed_dict={images: data_batch, labels: label_batch})

关于python - Tensorflow:提要字典错误:您必须为占位符张量提供一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38243194/

相关文章:

python - 如何将 fit_generator 与分成批处理的顺序数据一起使用?

python - 你如何检查 Python 字典中是否存在许多键?

python - 如何使用 .pth 文件添加 Python 导入路径

python - 使用索引查找带连字符的单词

tensorflow - 如何通过 conda 安装 tensorflow 插件

tensorflow - 在 GCP Dataproc 上的 Keras 模型上使用分布式 Tensorflow

machine-learning - GPU 在参数服务器上进行数据并行训练是否高效?

tensorflow - tensorflow 中的基本神经网络

python - 用于多变量时间序列的循环神经网络 - TensorFlow

python - 在Docker项目中保存更改