FailedPreconditionError: El intento de utilizar sin inicializar en Tensorflow

votos
34

Estoy trabajando a través del tutorial de flujo tensor , pero estoy tratando de utilizar un formato de pandas numpy o de los datos, por lo que puedo compararlo con los resultados scikit-learn.

Consigo los datos de reconocimiento de dígitos de Kaggle - aquí

El tutorial utiliza un formato extraño para cargar los datos, en los que como yo estoy tratando de comparar los resultados con los de otras bibliotecas, por lo que le gustaría mantenerlo en formato numpy o pandas.

Aquí está el código tutorial flujo tensor estándar (esto todo funciona 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)

Aquí he leído los datos, filtran estas variables objetivo y dividir los datos en pruebas y de formación conjuntos de datos (esto todo funciona 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)

Ahora, cuando trato de ejecutar el paso de la formación, aparece 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})

Aquí está el error completo:

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

Alguna idea de cómo puedo solucionar este problema?

Publicado el 30/11/2015 a las 11:41
fuente por usuario
En otros idiomas...                            


7 respuestas

votos
45

La FailedPreconditionErrorsurge porque el programa está intentando leer una variable (nombre "Variable_1") antes de que se haya inicializado. En TensorFlow, todas las variables deben inicializarse explícitamente, mediante la ejecución de sus operaciones "inicializador". Para mayor comodidad, puede ejecutar todos los inicializadores de variables en la sesión actual mediante la ejecución de la siguiente declaración antes de su bucle de formación:

tf.initialize_all_variables().run()

Tenga en cuenta que esta respuesta supone que, como en la cuestión, que está utilizando tf.InteractiveSession, lo que le permite ejecutar operaciones sin especificar una sesión. Para usos no interactivas, es más común el uso tf.Session, e inicializar de la siguiente manera:

init_op = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init_op)
Respondida el 01/12/2015 a las 02:15
fuente por usuario

votos
26

tf.initialize_all_variables () está en desuso. En lugar inicializar variables tensorflow con:

tf.global_variables_initializer()

Un ejemplo de uso común es:

with tf.Session() as sess:
     sess.run(tf.global_variables_initializer())
Respondida el 12/01/2017 a las 04:16
fuente por usuario

votos
8

A partir de la documentación oficial, FailedPreconditionError

Esta excepción se lanza con más frecuencia cuando se ejecuta una operación que lee un tf.Variable antes de que se haya inicializado.

En el caso de que el error incluso explica qué variable no se ha inicializado: Attempting to use uninitialized value Variable_1. Uno de los tutoriales TF explica mucho acerca de las variables, su creación / inicialización / guardar / cargar

Básicamente para inicializar la variable que tiene 3 opciones:

Yo casi siempre uso el primer enfoque. Recuerde que debe ponerlo dentro de un plazo de sesión. Por lo que obtendrá algo como esto:

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

Si tu eres curioso acerca de más información sobre las variables, lea esta documentación para saber cómo report_uninitialized_variablesy verificaciónis_variable_initialized .

Respondida el 24/04/2017 a las 06:08
fuente por usuario

votos
1

El FailedPreconditionError viene porque la sesión está intentando leer una variable que hasn "t sido inicializado.

A partir de Tensorflow versión 1.11.0, es necesario tener presente:

init_op = tf.global_variables_initializer()

sess = tf.Session()
sess.run(init_op)
Respondida el 19/12/2018 a las 13:04
fuente por usuario

votos
1

Tengo este mensaje de error de un caso completamente diferente. Parecía que el gestor de excepciones en tensorflow la levantó. Puede comprobar cada fila de la traza. En mi caso happned en tensorflow / Python / lib / io / file_io.py porque este archivo contenía un error diferente, donde self .__ modo y auto nombre .__ no se inicializan, y que necesitaba para llamar self._FileIO__mode, y en lugar self_FileIO__name .

Respondida el 27/07/2017 a las 07:06
fuente por usuario

votos
0

Cuando tuve este problema con tf.train.string_input_producer()e tf.train.batch()inicializar las variables locales antes de empezar el Coordinador resuelto el problema. Había estado recibiendo el error cuando inicializa las variables locales después de comenzar el Coordinador.

Respondida el 06/06/2018 a las 11:46
fuente por usuario

votos
0

Diferentes casos de uso, pero establecer la sesión como la sesión predeterminada hizo el truco para mí:

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

Este es uno de esos errores que es tan obvio, una vez que haya resuelto.

Mi caso de uso es el siguiente:
1) tienda Keras VGG16 como tensorflow gráfico
2) de carga kers VGG16 como un gráfico de
la función del TF 3) de ejecución en el gráfico y obtener:

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"]()]]
Respondida el 30/05/2018 a las 07:10
fuente por usuario

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