FailedPreconditionError: Încercarea de a utiliza neinitializate în Tensorflow

voturi
34

Sunt de lucru prin tutorial flux tensorului , dar am încercat să folosească un NumPy sau format de ursi panda pentru datele, astfel încât să pot compara cu Scikit-Learn rezultate.

Am obține datele de recunoaștere cifre de la kaggle - aici

Tutorialul utilizează un format ciudat pentru încărcarea datelor, în cazul în care după cum am încercat să compare cu rezultatele din alte biblioteci, astfel încât ar dori să-l păstrați în format NumPy sau ursi panda.

Aici este codul standard de tutorial flux tensor (toate acestea lucrează bine):

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

Aici am citit datele, dezbrăca variabilele țintă și împărți datele în faza de testare și de formare seturi de date (toate acestea lucrează bine):

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

Acum, când încerc să executați pasul de formare, am obține un FailedPreconditionError:

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

Iată eroarea completă:

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

Orice idei cu privire la modul în care pot rezolva această problemă?

Întrebat 30/11/2015 la 14:41
sursa de către utilizator
În alte limbi...                            


7 răspunsuri

voturi
45

FailedPreconditionErrorIa naștere deoarece programul încearcă să citească o variabilă (numită "Variable_1") înainte de a fi inițializat. În TensorFlow, toate variabilele trebuie să fie inițializat în mod explicit, prin rularea lor „operațiuni“ initializare. Pentru comoditate, puteți rula toate initializatori variabile în sesiunea curentă executând următoarea declarație înainte de bucla de formare:

tf.initialize_all_variables().run()

Rețineți că acest răspuns presupune că, la fel ca în întrebarea, pe care îl utilizați tf.InteractiveSession, care vă permite să executați operații fără a specifica o sesiune. Pentru utilizări non-interactive, este mult mai comun de a utiliza tf.Session, și inițializa după cum urmează:

init_op = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init_op)
Publicat 01/12/2015 la 05:15
sursa de către utilizator

voturi
26

tf.initialize_all_variables () este depreciat. În schimb inițializa variabilele tensorflow cu:

tf.global_variables_initializer()

Un exemplu comun de utilizare este:

with tf.Session() as sess:
     sess.run(tf.global_variables_initializer())
Publicat 12/01/2017 la 07:16
sursa de către utilizator

voturi
8

Din documentația oficială, FailedPreconditionError

Această excepție este ridicată cel mai frecvent atunci când rulează o operațiune care citește un tf.Variable înainte de a fost inițializată.

În cazul dumneavoastră , eroarea chiar explică ce variabilă nu a fost inițializată: Attempting to use uninitialized value Variable_1. Unul dintre tutorialele TF explică multe despre variabile, de crearea / initializare / salvarea / încărcarea

Practic pentru a inițializa variabila aveți 3 opțiuni:

  • inițializa toate variabilele globale cu tf.global_variables_initializer()
  • inițializa variabile pe care le interesează cu tf.variables_initializer(list_of_vars). Observați că puteți utiliza această funcție pentru a imita global_variable_initializer:tf.variable_initializers(tf.global_variables())
  • inițializa o singură variabilă cu var_name.initializer

Aproape am folosi întotdeauna prima abordare. Amintiți-ar trebui să-l pună în interiorul unei sesiuni de alergare. Deci, veți obține ceva de genul:

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

În cazul în care dvs. sunt curios cu privire la mai multe informații despre variabile, citiți această documentație pentru a ști cum să - report_uninitialized_variablesși verifice is_variable_initialized.

Publicat 24/04/2017 la 09:08
sursa de către utilizator

voturi
1

FailedPreconditionError vine , deoarece sesiunea încearcă să citească o variabilă care hasn "t fost inițializat.

Ca de Tensorflow versiunea 1.11.0, trebuie să luați acest lucru:

init_op = tf.global_variables_initializer()

sess = tf.Session()
sess.run(init_op)
Publicat 19/12/2018 la 13:04
sursa de către utilizator

voturi
1

Am primit acest mesaj de eroare de la un caz complet diferit. Se pare că handler excepție în tensorflow a ridicat. Puteți verifica fiecare rând din Traceback. În cazul meu happned în tensorflow / python / lib / io / file_io.py, deoarece acest fișier conținea un bug diferit, în cazul în care auto .__ modul și auto .__ nume nu au fost inițializat, și avea nevoie pentru a apela self._FileIO__mode și self_FileIO__name în schimb .

Publicat 27/07/2017 la 10:06
sursa de către utilizator

voturi
0

Când am avut această problemă cu tf.train.string_input_producer()și tf.train.batch()inițializează variabilele locale înainte de a am început coordonatorul rezolvat problema. Am fost obtinerea de eroare atunci când am inițializat variabilele locale după pornirea coordonatorul.

Publicat 06/06/2018 la 11:46
sursa de către utilizator

voturi
0

caz de utilizare diferite, dar setați sesiunea ca sesiunea implicită a făcut truc pentru mine:

with sess.as_default():
    result = compute_fn([seed_input,1])

Aceasta este una dintre aceste greșeli, care este atât de evident, odată ce ați rezolvat-o.

Meu de utilizare caz este următorul:
1) magazin keras VGG16 ca tensorflow grafic
2) sarcină KERS VGG16 ca un grafic
3) rula funcția tf pe grafic și obțineți:

FailedPreconditionError: Attempting to use uninitialized value block1_conv2/bias
     [[Node: block1_conv2/bias/read = Identity[T=DT_FLOAT, _class=["loc:@block1_conv2/bias"], _device="/job:localhost/replica:0/task:0/device:GPU:0"](block1_conv2/bias)]]
     [[Node: predictions/Softmax/_7 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_168_predictions/Softmax", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
Publicat 30/05/2018 la 10:10
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more