无效参数错误:您必须为占位符张量’Placeholder’提供值,其数据类型为float,形状为[1000,625]

当我尝试运行这段代码时,出现了上述意外的错误:

# -*- coding: utf-8 -*-"""Created on Fri Jun 24 10:38:04 2016@author: andrea"""# pylint: disable=missing-docstringfrom __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport timefrom six.moves import xrange  # pylint: disable=redefined-builtinimport tensorflow as tffrom pylab import *import argparseimport 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.flagsFLAGS = flags.FLAGSflags.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_placeholderdef 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_dictdef 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_pldef 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()

这是mlp模块:

from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport mathimport tensorflow as tfNUM_OUTPUT = 1NUM_INPUT = 625NUM_HIDDEN = 5def 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 outputdef 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

这里是错误信息:

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()

我真的不明白为什么会这样。看起来我已经在使用它们之前为所有占位符提供了值。我还删除了“merge_all_summaries”,因为这个问题与其他问题类似(这个这个),但这并没有帮助

编辑:训练数据:100000个样本 x 625个特征测试数据:1000个样本 x 625个特征输出数量:1


回答:

我认为问题出在这段代码中:

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')

您正在将集合’losses’中的所有损失加起来,包括训练和测试损失。特别是在这段代码中:

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

第一次调用mlp.loss会将训练损失添加到’losses’集合中。第二次调用mlp.loss会将其结果包含这些值。因此,当您尝试计算test_loss时,Tensorflow会抱怨您没有提供所有输入(训练占位符)。

也许您想要的是这样的代码?

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

希望这对您有帮助!

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注