2016-06-27 5 views
4

は、私は上記の予期しないエラーが発生します。InvalidArgumentError:このコードを実行しようとするときは、DTYPEフロートとプレースホルダテンソル「プレースホルダ」の値を供給し、形状なければなりません[1000,625]

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

これは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 

エラー:

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

私は本当に理由を理解していません。それは私がそれらを使用する前にすべてのプレースホルダーに給餌していると私に見えます。私はまた、この問題は(thisthis)他に似ているので、「merge_all_summaries」を削除、それは助けにはならなかった

EDIT:トレーニングデータ:100000個のサンプルはX 625個の機能 テストデータ:1000個のサンプルのx 625個の機能 num。出力:1

答えて

5

私はこの問題は、このコードではあると思う:

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

あなたはあなたのトレーニングやテストの損失の両方を含むコレクション「損失」、からのすべての損失を追加しています。特に、このコードでは:

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

mlp.lossの最初の呼び出しは、「損失」コレクションにトレーニングの損失を追加します。 mlp.lossへの2番目の呼び出しは、その結果にその値を組み込みます。したがって、test_lossを計算しようとすると、Tensorflowはすべての入力(トレーニングプレースホルダー)にフィードしていないと苦情を言います。

あなたはおそらくこのようなものを意味しましたか?

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

私は助けてくれることを願っています!

関連する問題