2016-02-15 11 views
5

का उपयोग करते समय प्लेसहोल्डर त्रुटि मुझे प्लेसहोल्डर त्रुटि मिल रही है।टेंसरफ्लो: tf.merge_all_summaries()

import tensorflow as tf 
import numpy as np 

def init_weights(shape): 
    return tf.Variable(tf.random_normal(shape, stddev=0.01)) 

class NeuralNet: 
    def __init__(self, hidden): 
     self.hidden = hidden 

    def __del__(self): 
     self.sess.close() 

    def fit(self, X, y): 
     _X = tf.placeholder('float', [None, None]) 
     _y = tf.placeholder('float', [None, 1]) 

     w0 = init_weights([X.shape[1], self.hidden]) 
     b0 = tf.Variable(tf.zeros([self.hidden])) 
     w1 = init_weights([self.hidden, 1]) 
     b1 = tf.Variable(tf.zeros([1])) 

     self.sess = tf.Session() 
     self.sess.run(tf.initialize_all_variables()) 

     h = tf.nn.sigmoid(tf.matmul(_X, w0) + b0) 
     self.yp = tf.nn.sigmoid(tf.matmul(h, w1) + b1) 

     C = tf.reduce_mean(tf.square(self.yp - y)) 
     o = tf.train.GradientDescentOptimizer(0.5).minimize(C) 

     correct = tf.equal(tf.argmax(_y, 1), tf.argmax(self.yp, 1)) 
     accuracy = tf.reduce_mean(tf.cast(correct, "float")) 
     tf.scalar_summary("accuracy", accuracy) 
     tf.scalar_summary("loss", C) 

     merged = tf.merge_all_summaries() 
     import shutil 
     shutil.rmtree('logs') 
     writer = tf.train.SummaryWriter('logs', self.sess.graph_def) 

     for i in xrange(1000+1): 
      if i % 100 == 0: 
       res = self.sess.run([o, merged], feed_dict={_X: X, _y: y}) 
      else: 
       self.sess.run(o, feed_dict={_X: X, _y: y}) 
     return self 

    def predict(self, X): 
     yp = self.sess.run(self.yp, feed_dict={_X: X}) 
     return (yp >= 0.5).astype(int) 


X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1]]) 
y = np.array([[0],[1],[1],[0]]]) 

m = NeuralNet(10) 
m.fit(X, y) 
yp = m.predict(X)[:, 0] 
print accuracy_score(y, yp) 

त्रुटि:

I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 8 
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 8 
0.847222222222 
W tensorflow/core/common_runtime/executor.cc:1076] 0x2340f40 Compute status: Invalid argument: You must feed a value for placeholder tensor 'Placeholder_1' with dtype float 
    [[Node: Placeholder_1 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 
W tensorflow/core/common_runtime/executor.cc:1076] 0x2340f40 Compute status: Invalid argument: You must feed a value for placeholder tensor 'Placeholder' with dtype float 
    [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 
Traceback (most recent call last): 
    File "neuralnet.py", line 64, in <module> 
    m.fit(X[tr], y[tr, np.newaxis]) 
    File "neuralnet.py", line 44, in fit 
    res = self.sess.run([o, merged], feed_dict={self._X: X, _y: y}) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 368, in run 
    results = self._do_run(target_list, unique_fetch_targets, feed_dict_string) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 444, in _do_run 
    e.code) 
tensorflow.python.framework.errors.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_1' with dtype float 
    [[Node: Placeholder_1 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 
Caused by op u'Placeholder_1', defined at: 
    File "neuralnet.py", line 64, in <module> 
    m.fit(X[tr], y[tr, np.newaxis]) 
    File "neuralnet.py", line 16, in fit 
    _y = tf.placeholder('float', [None, 1]) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/array_ops.py", line 673, in placeholder 
    name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_array_ops.py", line 463, in _placeholder 
    name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 664, in apply_op 
    op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1834, 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 1043, in __init__ 
    self._traceback = _extract_stack() 

मैं इसका क्या मतलब पता नहीं है, क्योंकि मैं sess.run(..., {_y: y, _X: X}) पर सही ढंग से मानचित्रण कर रहा हूँ ... मैं यहाँ एक पूरी तरह कार्यात्मक मेगावाट त्रुटि प्रजनन प्रदान करते हैं अगर मैं tf.merge_all_summaries() हटाता हूं या merged को self.sess.run([o, merged], ...) से हटा देता हूं तो यह ठीक हो जाता है।

यह इस पोस्ट के समान दिखता है: Error when computing summaries in TensorFlow हालांकि, मैं IPython उपयोग नहीं कर रहा ...

+0

[TensorFlow में सारांश की गणना करते समय त्रुटि] की संभावित डुप्लिकेट (http://stackoverflow.com/questions/35114376/error-when-computing-summaries-in-tensorflow) –

+0

@YaroslavBulatov मैं खोज की है और पाया है वह पोस्ट यह समान दिखता है। बात यह है कि उसकी त्रुटि केवल आईपीथन में पुन: उत्पन्न करने योग्य है। मैं आईपीथन का उपयोग नहीं कर रहा हूँ। मैं "सामान्य" पायथन का उपयोग कर रहा हूं ... –

+0

आप बैकट्रैक कहते हैं कि त्रुटि "sess.run ([o, merged], feed_dict = {self._X: X, _y: y}) में होती है" ... लेकिन ऐसा कोई नहीं है आपके द्वारा पोस्ट किए गए कोड में लाइन। –

उत्तर

16

tf.merge_all_summaries() समारोह सुविधाजनक, लेकिन यह भी कुछ हद तक खतरनाक है: यह डिफ़ॉल्ट ग्राफ में सभी के सारांश विलीन हो जाती है, जिसमें पिछले — से स्पष्ट रूप से अनकनेक्टेड — कोड के आमंत्रण शामिल हैं जो डिफ़ॉल्ट ग्राफ में सारांश नोड्स भी शामिल हैं। यदि पुराने सारांश नोड्स पुराने प्लेसहोल्डर पर निर्भर करते हैं, तो आपको अपने प्रश्न में दिखाए गए त्रुटियों की तरह त्रुटियां मिलेंगी (और previousquestions भी)।

दो स्वतंत्र समाधान कर रहे हैं:

  1. सुनिश्चित करें कि आप स्पष्ट रूप से सारांश यह है कि आप की गणना करना चाहते हैं इकट्ठा। यह आपके उदाहरण में स्पष्ट tf.merge_summary() सेशन का उपयोग कर के रूप में सरल है:

    accuracy_summary = tf.scalar_summary("accuracy", accuracy) 
    loss_summary = tf.scalar_summary("loss", C) 
    
    merged = tf.merge_summary([accuracy_summary, loss_summary]) 
    
  2. सुनिश्चित करें कि हर बार जब आप के सारांश का एक नया सेट बनाने के लिए, आप एक नया ग्राफ में ऐसा करते हैं। वैकल्पिक रूप से, आप नवीनतम खुला स्रोत (या आगामी 0.7.0 रिलीज) TensorFlow के संस्करण का उपयोग कर रहे हैं

    with tf.Graph().as_default(): 
        # Build model and create session in this scope. 
        # 
        # Only summary nodes created in this scope will be returned by a call to 
        # `tf.merge_all_summaries()` 
    

    राज्य पुनर्स्थापित करने के लिए, आप tf.reset_default_graph() कॉल कर सकते हैं: सिफारिश की शैली एक स्पष्ट डिफ़ॉल्ट ग्राफ उपयोग करने के लिए है ग्राफ के और किसी भी पुराने सारांश नोड्स को हटा दें।

+0

# 1 वास्तव में समस्या थी! अब यह सब समझ में आता है, धन्यवाद! –

+0

आप मालिक हैं! मैं पिछले कई घंटों से खो गया था! बहुत - बहुत धन्यवाद! – Gooshan

+0

आप "खतरनाक" भाग के बारे में सही हैं। टीएफ में बहुत सारे निहित व्यवहार हैं जो अच्छी तरह से इरादे से हैं लेकिन उन लोगों के लिए भ्रम और त्रुटियों का कारण बनते हैं जो उनके बारे में नहीं जानते हैं। –

संबंधित मुद्दे