2015-11-30 20 views
29

में अनियमित उपयोग करने का प्रयास करने के लिए मैं tensor flow tutorial के माध्यम से काम कर रहा हूं, लेकिन डेटा के लिए एक numpy या pandas प्रारूप का उपयोग करने की कोशिश कर रहा हूं, ताकि मैं इसे विज्ञान-सीख परिणामों के साथ तुलना कर सकूं।विफल प्रसंस्करण त्रुटि: Tensorflow

मैं kaggle से अंकों मान्यता डेटा प्राप्त - here

ट्यूटोरियल, डेटा अपलोड करने के लिए एक अजीब प्रारूप का उपयोग करता है, जहां के रूप में मैं अन्य पुस्तकालयों के परिणामों के साथ तुलना करने के लिए कोशिश कर रहा हूँ, इसलिए में रखने के लिए चाहते हैं numpy या पांडा प्रारूप।

यहां मानक टेन्सर प्रवाह ट्यूटोरियल कोड (यह सब ठीक काम करता है) है:

# Stuff from tensorflow tutorial 
import tensorflow as tf 
sess = tf.InteractiveSession() 

x = tf.placeholder("float", shape=[None, 784]) 
y_ = tf.placeholder("float", shape=[None, 10]) 

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

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

cross_entropy = -tf.reduce_sum(y_*tf.log(y)) 

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) 

यहाँ मैं डेटा, लक्ष्य चर को निकाल देते हैं परीक्षण और प्रशिक्षण डेटासेट में डेटा (यह सब काम करता है और पढ़ने के लिए विभाजन ठीक):

for i in range(100): 
    batch = np.array(df[i*50:i*50+50].values) 
    batch = np.multiply(batch, 1.0/255.0) 
    Target_batch = np.array(OHTarget[i*50:i*50+50].values) 
    Target_batch = np.multiply(Target_batch, 1.0/255.0) 
    train_step.run(feed_dict={x: batch, y_: Target_batch}) 
:

# Read dataframe from training data 
csvfile='train.csv' 
from pandas import DataFrame, read_csv 
df = read_csv(csvfile) 

# Strip off the target data and make it a separate dataframe. 
Target=df.label 
del df["label"] 

# Split data into training and testing sets 
msk = np.random.rand(len(df)) < 0.8 
dfTest = df[~msk] 
TargetTest = Target[~msk] 
df = df[msk] 
Target = Target[msk] 

# One hot encode the target 
OHTarget=pd.get_dummies(Target) 
OHTargetTest=pd.get_dummies(TargetTest) 

अब, जब मैं प्रशिक्षण कदम चलाने का प्रयास, मैं एक FailedPreconditionError मिल

--------------------------------------------------------------------------- 
FailedPreconditionError     Traceback (most recent call last) 
<ipython-input-82-967faab7d494> in <module>() 
     4  Target_batch = np.array(OHTarget[i*50:i*50+50].values) 
     5  Target_batch = np.multiply(Target_batch, 1.0/255.0) 
----> 6  train_step.run(feed_dict={x: batch, y_: Target_batch}) 

/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.pyc in run(self, feed_dict, session) 
    1265   none, the default session will be used. 
    1266  """ 
-> 1267  _run_using_default_session(self, feed_dict, self.graph, session) 
    1268 
    1269 

/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.pyc in _run_using_default_session(operation, feed_dict, graph, session) 
    2761      "the operation's graph is different from the session's " 
    2762      "graph.") 
-> 2763 session.run(operation, feed_dict) 
    2764 
    2765 

/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in run(self, fetches, feed_dict) 
    343 
    344  # Run request and get response. 
--> 345  results = self._do_run(target_list, unique_fetch_targets, feed_dict_string) 
    346 
    347  # User may have fetched the same tensor multiple times, but we 

/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in _do_run(self, target_list, fetch_list, feed_dict) 
    417   # pylint: disable=protected-access 
    418   raise errors._make_specific_exception(node_def, op, e.error_message, 
--> 419            e.code) 
    420   # pylint: enable=protected-access 
    421  raise e_type, e_value, e_traceback 

FailedPreconditionError: Attempting to use uninitialized value Variable_1 
    [[Node: gradients/add_grad/Shape_1 = Shape[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](Variable_1)]] 
Caused by op u'gradients/add_grad/Shape_1', defined at: 
    File "/Users/user32/anaconda/lib/python2.7/runpy.py", line 162, in _run_module_as_main 
    ........... 

...which was originally created as op u'add', defined at: 
    File "/Users/user32/anaconda/lib/python2.7/runpy.py", line 162, in _run_module_as_main 
    "__main__", fname, loader, pkg_name) 
[elided 17 identical lines from previous traceback] 
    File "/Users/user32/anaconda/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 3066, in run_code 
    exec(code_obj, self.user_global_ns, self.user_ns) 
    File "<ipython-input-45-59183d86e462>", line 1, in <module> 
    y = tf.nn.softmax(tf.matmul(x,W) + b) 
    File "/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py", line 403, in binary_op_wrapper 
    return func(x, y, name=name) 
    File "/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/gen_math_ops.py", line 44, in add 
    return _op_def_lib.apply_op("Add", x=x, y=y, name=name) 
    File "/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/op_def_library.py", line 633, in apply_op 
    op_def=op_def) 
    File "/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1710, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 988, in __init__ 
    self._traceback = _extract_stack() 

मैं इस तरह ठीक कर सकते करने के लिए के रूप में कोई भी विचार: ५३६९१३६३२१०

यहाँ पूर्ण त्रुटि है?

उत्तर

43

FailedPreconditionError उत्पन्न होता है क्योंकि प्रोग्राम प्रारंभ होने से पहले एक चर (जिसे "Variable_1" नाम दिया गया) पढ़ने का प्रयास कर रहा है। टेंसरफ्लो में, सभी चर को स्पष्ट रूप से प्रारंभ किया जाना चाहिए, अपने "प्रारंभकर्ता" संचालन को चलाकर। सुविधा के लिए, यदि आप अपने प्रशिक्षण पाश से पहले निम्नलिखित बयान को क्रियान्वित करते हुए वर्तमान सत्र में चर initializers के सभी चला सकते हैं:

tf.initialize_all_variables().run() 

नोट इस जवाब मानता है कि कि, प्रश्न में के रूप में, आप, tf.InteractiveSession उपयोग कर रहे हैं जो आपको सत्र निर्दिष्ट किए बिना संचालन चलाने की अनुमति देता है।

init_op = tf.initialize_all_variables() 

sess = tf.Session() 
sess.run(init_op) 
+1

इसके बजाय 'tf.global_variables_initializer' का उपयोग करें क्योंकि' tf.initialize_all_variables() 'को बहिष्कृत किया जाएगा। – Beginner

23

tf.initialize_all_variables() हटा दिया गया है: गैर-सहभागी उपयोगों के लिए, यह tf.Session उपयोग करने के लिए, और प्रारंभ इस प्रकार अधिक आम है। इसके बजाय प्रारंभ tensorflow साथ चर:

tf.global_variables_initializer() 

एक सामान्य उदाहरण उपयोग है:

with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
+0

sess.run (tf.global_variables_initializer()) और tf.global_variables_initializer() के बीच क्या अंतर है? आप अक्सर बाद में – dv3

+2

@ dv3 को टेंसरफ्लो में अन्य सभी चीज़ों की तरह देखते हैं, ऑपरेशन बनाने और इसे चलाने के बीच एक अंतर होता है। मुझे लगता है कि यही कारण है कि "itialize_all_variables "को" global_variables_initializer "के साथ प्रतिस्थापित किया गया था: नाम" startize_all_variables "लगता है जैसे यह करता है, जब यह केवल ऑपरेशन बनाता है। – mdaoust

+0

कृपया ध्यान दें कि विधि अब tf.initialize_all_variables() है –

8

आधिकारिक दस्तावेज से, FailedPreconditionError

This exception is most commonly raised when running an operation that reads a tf.Variable before it has been initialized.

आपके मामले में त्रुटि भी बताते हैं चर प्रारंभ नहीं किया गया था क्या : Attempting to use uninitialized value Variable_1। TF ट्यूटोरियल में से एक, चर बारे में बहुत कुछ बताते हैं उनके creation/initialization/saving/loading

मूल रूप से चर प्रारंभ करने में आप 3 विकल्प हैं:

  • tf.global_variables_initializer()
  • के साथ सभी वैश्विक चर प्रारंभ चर आप tf.variables_initializer(list_of_vars) साथ के बारे में परवाह आरंभ कर देगा।ध्यान दें कि आप global_variable_initializer नकल करने के लिए इस सुविधा का उपयोग कर सकते हैं: tf.variable_initializers(tf.global_variables())
  • var_name.initializer

साथ केवल एक चर को प्रारंभ मैं लगभग हमेशा पहले दृष्टिकोण का उपयोग करें। याद रखें कि आपको इसे सत्र चलाने के अंदर रखना चाहिए। तो अगर आप कुछ इस तरह मिल जाएगा: अपने चर के बारे में अधिक जानकारी के बारे में उत्सुक हैं, तो

with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 

, this documentation पढ़ कैसे report_uninitialized_variables जानते हैं और is_variable_initialized जाँच करने के लिए।

1

मुझे यह त्रुटि संदेश पूरी तरह से अलग मामले से मिला है। ऐसा लगता है कि tensorflow में अपवाद हैंडलर इसे उठाया। आप ट्रेसबैक में प्रत्येक पंक्ति की जांच कर सकते हैं। मेरे मामले में यह tensorflow/पायथन/lib/io/file_io.py में खुश हुआ क्योंकि इस फ़ाइल में एक अलग बग था, जहां स्वयं .__ मोड और स्वयं .__ नाम प्रारंभ नहीं किए गए थे, और इसके बजाय self._FileIO__mode, और self_FileIO__name को कॉल करने की आवश्यकता थी ।