2015-11-30 17 views
29

tensor flow tutorial aracılığıyla çalışıyorum, ancak veriler için bir numpy veya pandas biçimi kullanmaya çalışıyorum, böylece Scikit-Learn sonuçlarıyla karşılaştırabilirim.FailedPreconditionError: Tensorflow'da başlatılmamış olarak kullanılmaya çalışılıyor

ben kaggle gelen haneli tanıma veri almak - here

öğretici, veri yüklemek için garip bir biçim kullanır nerede diğer kütüphanelerden sonuçlarıyla karşılaştırmak çalışıyorum, bu yüzden onu tutmak istiyorum olarak numpy veya pandalar biçimi. İşte

standart tensör akış öğretici kodu (bu bütün iyi çalışıyor) 'dir:

Ben test ve eğitim veri setleri veri (bu her eserler verileri, hedef değişkenleri çıkarmaz okumak ve bölünmüş İşte
# 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) 

) ince:

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}) 
: Ben eğitim adımını çalıştırmayı denediğinizde

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

Şimdi, bir FailedPreconditionError olsun Bunu düzeltmek nasıl olarak

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

Herhangi bir fikir:

İşte tam hatadır? Program başlatıldıktan önce ("Variable_1" adında) bir değişken okuma girişimi nedeniyle

cevap

43

FailedPreconditionError doğar. TensorFlow'da, tüm değişkenler "başlatıcı" işlemlerini çalıştırarak, açıkça başlatılmalıdır. kolaylık sağlamak için, kendi eğitim döngü önce aşağıdaki deyimi yürüterek geçerli oturumda değişken başlatıcıları tüm çalıştırabilirsiniz:

Bu cevap söz konusu olduğu gibi, sen tf.InteractiveSession kullandığınız, varsayar olduğunu
tf.initialize_all_variables().run() 

Not hangi Bir oturum belirtmeden işlemleri çalıştırmanıza izin verir.

init_op = tf.initialize_all_variables() 

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

'tf.initialize_all_variables()' ifadesinin kullanılmayacağı için 'tf.global_variables_initializer' yerine kullanın. – Beginner

23

tf.initialize_all_variables() kullanımdan kaldırılmıştır şu şekildedir: etkileşimli olmayan kullanımlar için tf.Session kullanın ve başlatmak için daha yaygındır.

tf.global_variables_initializer() 

yaygın bir örnek kullanımı ise: resmi belgelerine

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

session.run (tf.global_variables_initializer()) ve tf.global_variables_initializer() arasındaki fark nedir? TensorFlow'daki diğer her şey gibi ikinci – dv3

+2

@ dv3'ü sık sık görüyorsunuz, işlemin oluşturulması ve çalıştırılması arasında bir fark var. Bence bu yüzden "initialize_all_variables", "global_variables_initializer" ile değiştirildi: "initialize_all_variables" ismi, yalnızca işlemi oluşturduğunda yaptığı gibi geliyor. – mdaoust

+0

lütfen yöntemin şu anda tf.initialize_all_variables olduğunu unutmayın() –

8

hata bile değişken başlatılmadı şeyi açıklıyor Senin durumunda FailedPreconditionError

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

ile değişkenler tensorflow yerine başlatmak : Attempting to use uninitialized value Variable_1. TF öğreticiler biri değişkenler hakkında çok şey anlatıyor onların creation/initialization/saving/loading

Temel olarak 3 seçenek var değişkeni başlatmak için: Eğer tf.variables_initializer(list_of_vars) ile umurumda değişkenlerine ilk

  • tf.global_variables_initializer()
  • ile tüm global değişkenler başlangıç.Eğer global_variable_initializer taklit için bu fonksiyonu kullanabilirsiniz dikkat edin: tf.variable_initializers(tf.global_variables())
  • Neredeyse her zaman ilk yaklaşım kullanmak var_name.initializer

ile tek değişkeni başlatmak. Bir oturumun içine koymalısın. Yani böyle bir şey alacak:

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

senin değişkenler hakkında daha fazla bilgi merak ediyorsanız, nasıl report_uninitialized_variables biliyor ve is_variable_initialized kontrol etmek this documentation okuyun.

1

Bu hata iletisini tamamen farklı bir durumdan aldım. Tensorflow'daki istisna işleyicisinin ortaya çıkardığı görülüyordu. Her satırı Traceback'de kontrol edebilirsiniz. Benim durumumda, tensorflow/python/lib/io/file_io.py dosyasında olduğu için bu dosya farklı bir hata içeriyordu, çünkü burada self .__ mode ve self .__ name başlamıyordu ve bunun yerine self._FileIO__mode ve self_FileIO__name çağırması gerekiyordu. .

İlgili konular