InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder' with dtype float and shape [1000,625]
Question: I get the above unexpected error when trying to run this code:

    
    
    # -*- coding: utf-8 -*-
    """
    Created on Fri Jun 24 10:38:04 2016
    
    @author: andrea
    """
    
    # pylint: disable=missing-docstring
    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    
    import time
    
    from six.moves import xrange  # pylint: disable=redefined-builtin
    import tensorflow as tf
    from pylab import *
    import argparse
    import mlp
    
    # Basic model parameters as external flags.
    tf.app.flags.FLAGS = tf.python.platform.flags._FlagValues()
    tf.app.flags._global_parser = argparse.ArgumentParser()
    flags = tf.app.flags
    FLAGS = flags.FLAGS
    flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')
    flags.DEFINE_integer('max_steps', 20, 'Number of steps to run trainer.')
    flags.DEFINE_integer('batch_size', 1000, 'Batch size. Must divide evenly into the dataset sizes.')
    flags.DEFINE_integer('num_samples', 100000, 'Total number of samples. Needed by the reader')
    flags.DEFINE_string('training_set_file', 'godzilla_dataset_size625', 'Training set file')
    flags.DEFINE_string('test_set_file', 'godzilla_testset_size625', 'Test set file')
    flags.DEFINE_string('test_size', 1000, 'Test set size')
    
    
    def placeholder_inputs(batch_size):
    
        images_placeholder = tf.placeholder(tf.float32, shape=(batch_size, mlp.NUM_INPUT))
        labels_placeholder = tf.placeholder(tf.float32, shape=(batch_size, mlp.NUM_OUTPUT))
        return images_placeholder, labels_placeholder
    
    
    def fill_feed_dict(data_set_file, images_pl, labels_pl):
    
        for l in range(int(FLAGS.num_samples/FLAGS.batch_size)):
            data_set = genfromtxt("../dataset/" + data_set_file, skip_header=l*FLAGS.batch_size, max_rows=FLAGS.batch_size)
            data_set = reshape(data_set, [FLAGS.batch_size, mlp.NUM_INPUT + mlp.NUM_OUTPUT])
            images = data_set[:, :mlp.NUM_INPUT]
            labels_feed = reshape(data_set[:, mlp.NUM_INPUT:], [FLAGS.batch_size, mlp.NUM_OUTPUT])
            images_feed = reshape(images, [FLAGS.batch_size, mlp.NUM_INPUT])
    
            feed_dict = {
                images_pl: images_feed,
                labels_pl: labels_feed,
            }
    
            yield feed_dict
    
    def reader(data_set_file, images_pl, labels_pl):
    
        data_set = loadtxt("../dataset/" + data_set_file)
        images = data_set[:, :mlp.NUM_INPUT]
        labels_feed = reshape(data_set[:, mlp.NUM_INPUT:], [data_set.shape[0], mlp.NUM_OUTPUT])
        images_feed = reshape(images, [data_set.shape[0], mlp.NUM_INPUT])
    
        feed_dict = {
            images_pl: images_feed,
            labels_pl: labels_feed,
        }
    
        return feed_dict, labels_pl
    
    
    def run_training():
    
        tot_training_loss = []
        tot_test_loss = []
        tf.reset_default_graph()
        with tf.Graph().as_default() as g:
            images_placeholder, labels_placeholder = placeholder_inputs(FLAGS.batch_size)    
            test_images_pl, test_labels_pl = placeholder_inputs(FLAGS.test_size)
            logits = mlp.inference(images_placeholder)      
            test_pred = mlp.inference(test_images_pl, reuse=True)
            loss = mlp.loss(logits, labels_placeholder)
            test_loss = mlp.loss(test_pred, test_labels_pl)
            train_op = mlp.training(loss, FLAGS.learning_rate)
    
            #summary_op = tf.merge_all_summaries()
    
            init = tf.initialize_all_variables()
    
            saver = tf.train.Saver()
            sess = tf.Session()
            #summary_writer = tf.train.SummaryWriter("./", sess.graph)
    
            sess.run(init)
            test_feed, test_labels_placeholder = reader(FLAGS.test_set_file, test_images_pl, test_labels_pl)
    
            # Start the training loop.
            for step in xrange(FLAGS.max_steps):
                start_time = time.time()
                feed_gen = fill_feed_dict(FLAGS.training_set_file, images_placeholder, labels_placeholder)
                i=1
                for feed_dict in feed_gen:
                    _, loss_value = sess.run([train_op, loss], feed_dict=feed_dict)
                    _, test_loss_val = sess.run([test_pred, test_loss], feed_dict=test_feed)
                    tot_training_loss.append(loss_value)
                    tot_test_loss.append(test_loss_val)
                    #if i % 10 == 0:
                    #print('%d minibatches analyzed...'%i)
                    i+=1
    
                if step % 1 == 0:        
                    duration = time.time() - start_time
                    print('Epoch %d (%.3f sec):\n training loss = %f \n test loss = %f ' % (step, duration, loss_value, test_loss_val))
    
            predictions = sess.run(test_pred, feed_dict=test_feed)
            savetxt("predictions", predictions)
            savetxt("training_loss", tot_training_loss)
            savetxt("test_loss", tot_test_loss)
            plot(tot_training_loss)    
            plot(tot_test_loss)
            figure()
            scatter(test_feed[test_labels_placeholder], predictions)
    
      #plot([.4, .6], [.4, .6])
    
    run_training()
    
    
    #if __name__ == '__main__':
    #  tf.app.run()
    

this is mlp:

    
    
    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    
    import math
    
    import tensorflow as tf
    
    NUM_OUTPUT = 1
    NUM_INPUT = 625
    NUM_HIDDEN = 5
    
    def inference(images, reuse=None):
        with tf.variable_scope('hidden1', reuse=reuse):
            weights = tf.get_variable(name='weights', shape=[NUM_INPUT, NUM_HIDDEN], initializer=tf.contrib.layers.xavier_initializer())
            weight_decay = tf.mul(tf.nn.l2_loss(weights), 0.00001, name='weight_loss')
            tf.add_to_collection('losses', weight_decay)
            biases = tf.Variable(tf.constant(0.0, name='biases', shape=[NUM_HIDDEN]))
            hidden1_output = tf.nn.relu(tf.matmul(images, weights)+biases, name='hidden1')
    
        with tf.variable_scope('output', reuse=reuse):
            weights = tf.get_variable(name='weights', shape=[NUM_HIDDEN, NUM_OUTPUT], initializer=tf.contrib.layers.xavier_initializer())
            weight_decay = tf.mul(tf.nn.l2_loss(weights), 0.00001, name='weight_loss')
            tf.add_to_collection('losses', weight_decay)
            biases = tf.Variable(tf.constant(0.0, name='biases', shape=[NUM_OUTPUT]))
            output = tf.nn.relu(tf.matmul(hidden1_output, weights)+biases, name='output')
    
        return output
    
    def loss(outputs, labels):
    
      rmse = tf.sqrt(tf.reduce_mean(tf.square(tf.sub(labels, outputs))), name="rmse")
      tf.add_to_collection('losses', rmse)
      return tf.add_n(tf.get_collection('losses'), name='total_loss')
    
    
    def training(loss, learning_rate):
    
      tf.scalar_summary(loss.op.name, loss)
      optimizer = tf.train.GradientDescentOptimizer(learning_rate)
      global_step = tf.Variable(0, name='global_step', trainable=False)
      train_op = optimizer.minimize(loss, global_step=global_step)
      return train_op
    

here the error:

    
    
    Traceback (most recent call last):
    
      File "<ipython-input-1-f16dfed3b99b>", line 1, in <module>
        runfile('/home/andrea/test/python/main_mlp_yield.py', wdir='/home/andrea/test/python')
    
      File "/usr/local/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 714, in runfile
        execfile(filename, namespace)
    
      File "/usr/local/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 81, in execfile
        builtins.execfile(filename, *where)
    
      File "/home/andrea/test/python/main_mlp_yield.py", line 127, in <module>
        run_training()
    
      File "/home/andrea/test/python/main_mlp_yield.py", line 105, in run_training
        _, test_loss_val = sess.run([test_pred, test_loss], feed_dict=test_feed)
    
      File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 372, in run
        run_metadata_ptr)
    
      File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 636, in _run
        feed_dict_string, options, run_metadata)
    
      File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 708, in _do_run
        target_list, options, run_metadata)
    
      File "/usr/local/lib/python2.7/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 [1000,625]
         [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[1000,625], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
    Caused by op u'Placeholder', defined at:
      File "/usr/local/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/start_ipython_kernel.py", line 205, in <module>
        __ipythonkernel__.start()
      File "/usr/local/lib/python2.7/dist-packages/ipykernel/kernelapp.py", line 442, in start
        ioloop.IOLoop.instance().start()
      File "/usr/local/lib/python2.7/dist-packages/zmq/eventloop/ioloop.py", line 162, in start
        super(ZMQIOLoop, self).start()
      File "/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py", line 883, in start
        handler_func(fd_obj, events)
      File "/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py", line 275, in null_wrapper
        return fn(*args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/zmq/eventloop/zmqstream.py", line 440, in _handle_events
        self._handle_recv()
      File "/usr/local/lib/python2.7/dist-packages/zmq/eventloop/zmqstream.py", line 472, in _handle_recv
        self._run_callback(callback, msg)
      File "/usr/local/lib/python2.7/dist-packages/zmq/eventloop/zmqstream.py", line 414, in _run_callback
        callback(*args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py", line 275, in null_wrapper
        return fn(*args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/ipykernel/kernelbase.py", line 276, in dispatcher
        return self.dispatch_shell(stream, msg)
      File "/usr/local/lib/python2.7/dist-packages/ipykernel/kernelbase.py", line 228, in dispatch_shell
        handler(stream, idents, msg)
      File "/usr/local/lib/python2.7/dist-packages/ipykernel/kernelbase.py", line 391, in execute_request
        user_expressions, allow_stdin)
      File "/usr/local/lib/python2.7/dist-packages/ipykernel/ipkernel.py", line 199, in do_execute
        shell.run_cell(code, store_history=store_history, silent=silent)
      File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2723, in run_cell
        interactivity=interactivity, compiler=compiler, result=result)
      File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2831, in run_ast_nodes
        if self.run_code(code, result):
      File "/usr/local/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2885, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
      File "<ipython-input-1-f16dfed3b99b>", line 1, in <module>
        runfile('/home/andrea/test/python/main_mlp_yield.py', wdir='/home/andrea/test/python')
      File "/usr/local/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 714, in runfile
        execfile(filename, namespace)
      File "/usr/local/lib/python2.7/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 81, in execfile
        builtins.execfile(filename, *where)
      File "/home/andrea/test/python/main_mlp_yield.py", line 127, in <module>
        run_training()
      File "/home/andrea/test/python/main_mlp_yield.py", line 79, in run_training
        images_placeholder, labels_placeholder = placeholder_inputs(FLAGS.batch_size)
      File "/home/andrea/test/python/main_mlp_yield.py", line 37, in placeholder_inputs
        images_placeholder = tf.placeholder(tf.float32, shape=(batch_size, mlp.NUM_INPUT))
      File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/array_ops.py", line 895, in placeholder
        name=name)
      File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_array_ops.py", line 1238, in _placeholder
        name=name)
      File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 704, in apply_op
        op_def=op_def)
      File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2260, in create_op
        original_op=self._default_original_op, op_def=op_def)
      File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1230, in __init__
        self._traceback = _extract_stack()
    

I really don't understand why. It looks to me that I'm feeding all the
placeholders before using them. I also removed the "merge_all_summaries" since
this problem is similar to other
([this](http://stackoverflow.com/questions/35413618/tensorflow-placeholder-
error-when-using-tf-merge-all-summaries) and
[this](http://stackoverflow.com/questions/35114376/error-when-computing-
summaries-in-tensorflow)), but it didn't help

EDIT: training data: 100000 samples x 625 features test data: 1000 samples x
625 features num. output: 1


Answer: I think the problem is in this code:

    
    
    def loss(outputs, labels):
      rmse = tf.sqrt(tf.reduce_mean(tf.square(tf.sub(labels, outputs))), name="rmse")
      tf.add_to_collection('losses', rmse)
      return tf.add_n(tf.get_collection('losses'), name='total_loss')
    

You're adding up all the losses from collection 'losses', including both your
training and test losses. In particular, in this code:

    
    
    loss = mlp.loss(logits, labels_placeholder)
    test_loss = mlp.loss(test_pred, test_labels_pl)
    

The first call to mlp.loss will add training losses to the 'losses'
collection. The second call to mlp.loss will incorporate those values in its
result. So when you try to compute the test_loss, Tensorflow complains that
you didn't feed all of the inputs (the training placeholders).

Perhaps you meant something like this?

    
    
    def loss(outputs, labels):
      rmse = tf.sqrt(tf.reduce_mean(tf.square(tf.sub(labels, outputs))), name="rmse")
      return rmse
    

I hope that helps!

