FailedPreconditionError: tenter d'utiliser uninitialized in Tensorflow

je travaille à travers le tutoriel TensorFlow , qui utilise un format" bizarre " pour télécharger les données. Je voudrais utiliser le format NumPy ou pandas pour les données, afin de pouvoir les comparer avec les résultats de scikit-learn.

je reçois les données de reconnaissance numérique de Kaggle: https://www.kaggle.com/c/digit-recognizer/data .

voici le code du tutoriel TensorFlow (qui fonctionne bien):

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

ici, je lis les données, je supprime les variables cibles et je divise les données en ensembles de données d'essai et de formation (tout cela fonctionne bien):

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

Maintenant, quand j'essaye d'exécuter l'étape de formation, je reçois 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})

Voici l'erreur complète:

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

une idée de comment je peux réparer ça?

44
demandé sur nbro 2015-11-30 17:41:20

6 réponses

le FailedPreconditionError se produit parce que le programme tente de lire une variable (appelée "Variable_1" ) avant qu'elle ait été initialisée. Dans TensorFlow, toutes les variables doivent être initialisées explicitement, en exécutant leurs opérations de "initialisation". Pour plus de commodité, vous pouvez exécuter tous les initialisateurs de variables dans la session courante en exécutant la déclaration suivante avant votre boucle d'entraînement:

tf.initialize_all_variables().run()

Notez que cette réponse suppose que, comme dans la question, vous utilisez tf.InteractiveSession , qui vous permet d'exécuter des opérations sans spécifier de session. Pour les utilisations non interactives , il est plus courant d'utiliser tf.Session , et d'initialiser comme suit:

init_op = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init_op)
60
répondu mrry 2015-12-01 05:15:19

tf.initialize_all_variables() est déprécié. À la place, initialisez les variables de tensorflow avec:

tf.global_variables_initializer()

un exemple d'usage courant est:

with tf.Session() as sess:
     sess.run(tf.global_variables_initializer())
35
répondu user3144836 2018-07-07 18:03:38

à Partir de la documentation officielle, FailedPreconditionError

cette exception est le plus souvent soulevée lors de l'exécution d'une opération qui ça lit un tf.Variable avant qu'elle ait été initialisée.

dans votre cas, l'erreur explique même quelle variable n'a pas été initialisée: Attempting to use uninitialized value Variable_1 . Un des tutoriels de TF explique beaucoup de choses sur les variables, leur création/initialisation/sauvegarde/chargement

fondamentalement pour initialiser la variable vous avez 3 options:

j'utilise presque toujours la première approche. Rappelez-vous que vous devriez le mettre dans une session de course. Vous obtiendrez donc quelque chose comme ceci:

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

si vous êtes curieux de plus amples informations sur les variables, lisez cette documentation pour savoir comment report_uninitialized_variables et cochez is_variable_initialized .

11
répondu Salvador Dali 2017-04-24 09:08:30

cas D'utilisation différent, mais définir votre session comme la session par défaut a fait le tour pour moi:

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

C'est une de ces erreurs qui est si évidente, une fois que vous l'avez résolu.

mon étui est le suivant:

1) stocker le kéras VGG16 comme TensorFlow graph

2) Charger kers VGG16 comme un graphe

3) lancer la fonction tf sur le graphe et obtenir:

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"]()]]
1
répondu layser 2018-05-30 10:10:21

j'ai reçu ce message d'erreur d'un cas complètement différent. Il semble que le manipulateur d'exception dans tensorflow l'a soulevé. Vous pouvez vérifier chaque ligne dans le Traceback. Dans mon cas , c'est arrivé dans tensorflow/python/lib/io/file_io.py , parce que ce fichier contenait un bug différent, où self.__mode et self.__name n'étaient pas initialisés , et il fallait appeler self._FileIO__mode , et self_FileIO__name à la place.

1
répondu Tal 2018-07-07 18:03:21

quand j'ai eu ce problème avec tf.train.string_input_producer() et tf.train.batch() initialiser les variables locales avant de commencer le Coordonnateur a résolu le problème. J'ai eu l'erreur quand j'ai initialisé les variables locales après avoir lancé le coordinateur.

0
répondu Eric Antoine Scuccimarra 2018-07-07 18:02:31