FailedPreconditionError: la Tentative d'utilisation non initialisée dans Tensorflow
Je suis en train de travailler à travers les TensorFlow tutoriel, qui utilise une "bizarre" format de télécharger les données. Je voudrais utiliser le NumPy ou pandas format pour les données, afin que je puisse comparer avec scikit-learn résultats.
- Je obtenir les chiffres les données de reconnaissance de Kaggle: https://www.kaggle.com/c/digit-recognizer/data.
Ici le code de la TensorFlow tutoriel (qui fonctionne très 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 j'ai lu les données, d'en extraire les variables de l'objet et de diviser les données dans les essais et la formation ensembles de données (tout cela fonctionne très 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 le message d'erreur:
---------------------------------------------------------------------------
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()
Aucune idée de comment je peux résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
La
FailedPreconditionError
se pose parce que le programme tente de lire une variable (nommée"Variable_1"
) avant qu'il a été initialisé. Dans TensorFlow, toutes les variables doivent être explicitement initialisée, de l'exécution de leurs "initialiseur" des opérations. Pour plus de commodité, vous pouvez exécuter toutes les variables initialiseurs dans la session en cours, par l'exécution de l'instruction suivante avant votre formation en boucle:Noter 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écification d'une session. Pour les non-interactive utilise, il est plus courant d'utilisertf.Session
, et de les initialiser comme suit:tf.global_variables_initializer
au lieu de cela, cartf.initialize_all_variables()
sera obsolète.tf.initialize_all_variables()
est obsolète. Au lieu d'initialiser tensorflow variables avec:Un exemple courant d'utilisation est:
tf.initialize_all_variables()
est celui obsolète. Voir: tensorflow.org/api_docs/python/tf/initialize_all_variablesÀ partir de la documentation officielle, FailedPreconditionError
Dans votre cas, l'erreur, même explique ce que la variable n'a pas été initialisé:
Attempting to use uninitialized value Variable_1
. L'un des TF tutoriels explique beaucoup de choses sur les variables, leur création/initialisation/sauvegarde/chargementEssentiellement pour initialiser la variable que vous avez 3 options:
tf.global_variables_initializer()
tf.variables_initializer(list_of_vars)
. Notez que vous pouvez utiliser cette fonction pour imiter global_variable_initializer:tf.variable_initializers(tf.global_variables())
var_name.initializer
J'ai presque toujours utiliser la première approche. Rappelez-vous, vous devriez le mettre à l'intérieur d'une session. Ainsi, vous obtiendrez quelque chose comme ceci:
Si vous êtes curieux de connaître plus d'informations sur les variables, lire cette documentation savoir comment
report_uninitialized_variables
et vérifieris_variable_initialized
.Différents cas d'utilisation, mais l'ensemble de votre session par défaut de la session a fait le tour pour moi:
C'est l'une de ces erreurs, c'est tellement évident, une fois que vous l'avez résolu.
Mon cas d'utilisation est le suivant:
1) magasin de keras VGG16 comme tensorflow graphique
2) charger le kers VGG16 comme un graphique
3) exécutez le tf de la fonction sur le graphique et obtenir:
J'ai eu ce message d'erreur à partir d'une toute autre affaire. Il semblait que le gestionnaire d'exception tensorflow 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 autre bug, oùself.__mode
etself.__name
n'étaient pas initialisé, et il fallait l'appelerself._FileIO__mode
, etself_FileIO__name
à la place.Vous devez initialiser les variables avant de les utiliser.
Si vous essayez d'évaluer les variables avant l'initialisation d'eux, vous découvrirez:
FailedPreconditionError: Attempting to use uninitialized value tensor.
La façon la plus simple de l'initialisation de toutes les variables à la fois à l'aide de:
tf.global_variables_initializer()
Vous utilisez
sess.run(init)
pour exécuter l'initialiseur, sans aller chercher n'importe quelle valeur.Pour initialiser uniquement un sous-ensemble de variables, vous utilisez
tf.variables_initializer()
liste des variables:Vous pouvez également initialiser chaque variable séparément à l'aide d'
tf.Variable.initializer
Quand j'ai eu ce problème avec
tf.train.string_input_producer()
ettf.train.batch()
initialisation des variables locales à l'avant j'ai commencé à le Coordinateur résolu le problème. J'avais été l'obtention de l'erreur quand j'ai initialisé les variables locales après le départ de la Coordinatrice.La FailedPreconditionError vient du fait que la session est d'essayer de lire une variable qui n'a"pas été initialisé.
De Tensorflow version 1.11.0, vous devez prendre ce :
Peut-être quelque chose a changé au cours des dernières TensorFlow construit, parce que pour moi, la course
avant le montage de tous les modèles semble faire l'affaire. La plupart des anciens exemples et commentaires semblent suggérer
tf.global_variables_initializer()
.