2017-06-22 21 views
8

मैं नीचे तंत्रिका नेट की प्रशिक्षण प्रक्रिया का सारांश प्राप्त करने का प्रयास कर रहा हूं।टेन्सफोर्लो सारांश विलय त्रुटि: आकार [-1,784] में नकारात्मक आयाम

import tensorflow as tf 
import numpy as np 

from tensorflow.examples.tutorials.mnist import input_data 

mnist = input_data.read_data_sets(".\MNIST",one_hot=True) 

# Create the model 
def train_and_test(hidden1,hidden2, learning_rate, epochs, batch_size): 

    with tf.name_scope("first_layer"): 
     input_data = tf.placeholder(tf.float32, [batch_size, 784], name = "input") 
     weights1 = tf.Variable(
     tf.random_normal(shape =[784, hidden1],stddev=0.1),name = "weights") 
     bias = tf.Variable(tf.constant(0.0,shape =[hidden1]), name = "bias") 
     activation = tf.nn.relu(
     tf.matmul(input_data, weights1) + bias, name = "relu_act") 
     tf.summary.histogram("first_activation", activation) 

    with tf.name_scope("second_layer"): 
     weights2 = tf.Variable(
     tf.random_normal(shape =[hidden1, hidden2],stddev=0.1), 
     name = "weights") 
     bias2 = tf.Variable(tf.constant(0.0,shape =[hidden2]), name = "bias") 
     activation2 = tf.nn.relu(
     tf.matmul(activation, weights2) + bias2, name = "relu_act") 
     tf.summary.histogram("second_activation", activation2) 

    with tf.name_scope("output_layer"): 
     weights3 = tf.Variable(
      tf.random_normal(shape=[hidden2, 10],stddev=0.5), name = "weights") 
     bias3 = tf.Variable(tf.constant(1.0, shape =[10]), name = "bias") 
     output = tf.add(
     tf.matmul(activation2, weights3, name = "mul"), bias3, name = "output") 
     tf.summary.histogram("output_activation", output) 
    y_ = tf.placeholder(tf.float32, [batch_size, 10]) 

    with tf.name_scope("loss"): 
     cross_entropy = tf.reduce_mean(
     tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=output)) 
     tf.summary.scalar("cross_entropy", cross_entropy) 
    with tf.name_scope("train"): 
     train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy) 

    with tf.name_scope("tests"): 
     correct_prediction = tf.equal(tf.argmax(output, 1), tf.argmax(y_, 1)) 
     accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 

    summary_op = tf.summary.merge_all() 

    sess = tf.InteractiveSession() 
    writer = tf.summary.FileWriter("./data", sess.graph) 
    tf.global_variables_initializer().run() 

    # Train 
    for i in range(epochs): 
     batch_xs, batch_ys = mnist.train.next_batch(batch_size) 
     _, summary = sess.run([train_step,summary_op], feed_dict={input_data: batch_xs, y_: batch_ys}) 
    writer.add_summary(summary) 

    if i % 10 ==0: 
      test_xs, test_ys = mnist.train.next_batch(batch_size) 
      test_accuracy = sess.run(accuracy, feed_dict = {input_data : test_xs, y_ : test_ys}) 
    writer.close() 
    return test_accuracy 

if __name__ =="__main__": 
print(train_and_test(500, 200, 0.001, 10000, 100)) 

मैं मॉडल परीक्षण डाटा के एक यादृच्छिक बैच के साथ हर 10 कदम का परीक्षण कर रहा हूँ। समस्या ग्रीष्मकालिन लेखक में है। लूप के अंदर sess.run() त्रुटि के बाद फेंकता है।

Traceback (most recent call last): 

    File "<ipython-input-18-78c88c8e6471>", line 1, in <module> 
    runfile('C:/Users/Suman 
Nepal/Documents/Projects/MNISTtensorflow/mnist.py', wdir='C:/Users/Suman 
Nepal/Documents/Projects/MNISTtensorflow') 

    File "C:\Users\Suman Nepal\Anaconda3\lib\site- 
packages\spyder\utils\site\sitecustomize.py", line 880, in runfile 
execfile(filename, namespace) 

    File "C:\Users\Suman Nepal\Anaconda3\lib\site- 
packages\spyder\utils\site\sitecustomize.py", line 102, in execfile 
exec(compile(f.read(), filename, 'exec'), namespace) 

    File "C:/Users/Suman Nepal/Documents/Projects/MNISTtensorflow/mnist.py", line 68, in <module> 
    print(train_and_test(500, 200, 0.001, 100, 100)) 

    File "C:/Users/Suman Nepal/Documents/Projects/MNISTtensorflow/mnist.py", line 58, in train_and_test 
    _, summary = sess.run([train_step,summary_op], feed_dict={input_data: batch_xs, y_: batch_ys}) 

    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 789, in run 
    run_metadata_ptr) 

    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 997, in _run 
feed_dict_string, options, run_metadata) 

    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1132, in _do_run 
target_list, options, run_metadata) 

    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1152, in _do_call 
raise type(e)(node_def, op, message) 

InvalidArgumentError: Shape [-1,784] has negative dimensions 
[[Node: first_layer_5/input = Placeholder[dtype=DT_FLOAT, shape=[?,784], _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

Caused by op 'first_layer_5/input', defined at: 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\spyder\utils\ipython\start_kernel.py", line 231, in <module> 
main() 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\spyder\utils\ipython\start_kernel.py", line 227, in main 
kernel.start() 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\ipykernel\kernelapp.py", line 477, in start 
ioloop.IOLoop.instance().start() 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\zmq\eventloop\ioloop.py", line 177, in start 
super(ZMQIOLoop, self).start() 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tornado\ioloop.py", line 888, in start 
handler_func(fd_obj, events) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tornado\stack_context.py", line 277, in null_wrapper 
return fn(*args, **kwargs) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\zmq\eventloop\zmqstream.py", line 440, in _handle_events 
self._handle_recv() 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\zmq\eventloop\zmqstream.py", line 472, in _handle_recv 
self._run_callback(callback, msg) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\zmq\eventloop\zmqstream.py", line 414, in _run_callback 
callback(*args, **kwargs) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tornado\stack_context.py", line 277, in null_wrapper 
return fn(*args, **kwargs) 
File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 283, in dispatcher 
return self.dispatch_shell(stream, msg) 
File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 235, in dispatch_shell 
handler(stream, idents, msg) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\ipykernel\kernelbase.py", line 399, in execute_request 
user_expressions, allow_stdin) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\ipykernel\ipkernel.py", line 196, in do_execute 
res = shell.run_cell(code, store_history=store_history, silent=silent) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\ipykernel\zmqshell.py", line 533, in run_cell 
return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2717, in run_cell 
interactivity=interactivity, compiler=compiler, result=result) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2827, in run_ast_nodes 
if self.run_code(code, result): 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2881, in run_code 
exec(code_obj, self.user_global_ns, self.user_ns) 
    File "<ipython-input-8-78c88c8e6471>", line 1, in <module> 
runfile('C:/Users/Suman Nepal/Documents/Projects/MNISTtensorflow/mnist.py', wdir='C:/Users/Suman Nepal/Documents/Projects/MNISTtensorflow') 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 880, in runfile 
execfile(filename, namespace) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile 
exec(compile(f.read(), filename, 'exec'), namespace) 
    File "C:/Users/Suman Nepal/Documents/Projects/MNISTtensorflow/mnist.py", line 86, in <module> 
    File "C:/Users/Suman Nepal/Documents/Projects/MNISTtensorflow/mnist.py", line 12, in train_and_test 
    input_data = tf.placeholder(tf.float32, [None, 784], name = "input") 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tensorflow\python\ops\array_ops.py", line 1530, in placeholder 
return gen_array_ops._placeholder(dtype=dtype, shape=shape, name=name) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tensorflow\python\ops\gen_array_ops.py", line 1954, in _placeholder 
name=name) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 767, in apply_op 
op_def=op_def) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 2506, in create_op 
original_op=self._default_original_op, op_def=op_def) 
    File "C:\Users\Suman Nepal\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py", line 1269, in __init__ 
self._traceback = _extract_stack() 

InvalidArgumentError (see above for traceback): Shape [-1,784] has negative dimensions 
    [[Node: first_layer_5/input = Placeholder[dtype=DT_FLOAT, shape=[?,784], _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

यदि मैंने सभी सारांश लेखकों और सारांश को हटा दिया है, तो मॉडल ठीक चलता है। तुम मुझे यहाँ समस्या दिखाई देती है मदद कर सकते हैं? मैंने टेंसर के आकार में हेरफेर करने की कोशिश की लेकिन कहीं भी नहीं मिला।

+1

यह आईपीथन कंसोल के साथ समस्या थी। यदि आपके पास समान समस्या है तो पूरे कोड को tf.Graph() में g के रूप में लपेटें और उस ग्राफ़ में सत्र चलाएं। – nsuman

उत्तर

1

मैं भी इस समस्या हो रही थी। मूल सहमति के आसपास खोजना आपके कोड में कहीं और समस्याओं की जांच करना है।

क्या यह मेरे लिए तय मैं अपने प्लेसहोल्डर के लिए डेटा में खिला के बिना एक sess.run(summary_op) कर रहा था था।

टेंस्फोर्लो प्लेसहोल्डर्स के साथ थोड़ा अजीब प्रतीत होता है, अक्सर वे आपको खिला नहीं देते हैं, यदि आप उन ग्राफों के हिस्से का मूल्यांकन करने की कोशिश कर रहे हैं जो आप से स्वतंत्र हैं। हालांकि, यह किया।

3

नष्ट कर दिया जवाब में से एक टिप्पणी, मूल पोस्टर से से:

मैं वास्तव में with tf.Graph() as g के तहत एक तंत्रिका शुद्ध निर्माण। मैं इंटरैक्टिव सत्र हटा दिया और के रूप में सत्र शुरू कर दिया। यह समस्या तय की।

ग्राफ g कि जिस तरह से ग्राफ डिफ़ॉल्ट, इस प्रकार सत्र (मूल कोड में tf.InteractiveSession) के बजाय एक और ग्राफ का प्रयोग करेंगे के रूप में चिह्नित नहीं किया गया।

ध्यान दें कि मैं एक ही त्रुटि संदेश के कारण यहां ठोकर खाई। मेरे मामले में, मैंने गलती से ऐसा कुछ किया था:

input_data = tf.placeholder(tf.float32, shape=(None, 50)) 
input_data = tf.tanh(input_data) 
session.run(..., feed_dict={input_data: ...}) 

आईई। मैंने प्लेसहोल्डर को नहीं खिलाया। ऐसा लगता है कि कुछ अन्य टेन्सर संचालन तो यह भ्रामक त्रुटि में परिणाम कर सकते के रूप में आंतरिक रूप से एक अपरिभाषित आयाम -1 के रूप में प्रतिनिधित्व किया है।

0

इसे InteractiveSession प्रारंभिकरण के साथ करना पड़ सकता है।

मैंने इसे शुरुआत में शुरू किया और फिर यह काम किया - फिर सत्र के भीतर वैश्विक चर शुरू किया।

मैं पुराने कोड के साथ त्रुटि को पुन: उत्पन्न करने में असमर्थ हूं, जो इसे कहीं अप्रत्याशित या कैशिंग सेटिंग्स बनाता है।

import tensorflow as tf 
sess = tf.InteractiveSession() 


from tensorflow.examples.tutorials.mnist import input_data 

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) 

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

W = tf.Variable(tf.zeros([784,10])) 

b = tf.Variable(tf.zeros([10])) 

y = tf.nn.softmax(tf.matmul(x, W)+b) 

y_ = tf.placeholder(tf.float32, [None,10]) 



cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) 
train_step = tf.train.GradientDescentOptimizer(0.05).minimize(cross_entropy) 
sess.run(tf.global_variables_initializer()) 


for _ in range(1000): 
    batch_xs, batch_ys = mnist.train.next_batch(100) 
    #print batch_xs.shape, batch_ys.shape 
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) 
संबंधित मुद्दे