training retraining hub guide python pandas classification tensorflow

python - retraining - tensorflow image classification training



FailedPreconditionError: intento de uso sin inicializar en Tensorflow (9)

Caso de uso diferente, pero configurar su 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 estos errores que es tan obvio, una vez que lo ha resuelto.

Mi caso de uso es el siguiente:
1) almacenar keras VGG16 como gráfico de tensorflow
2) cargar kers VGG16 como un gráfico
3) ejecute la función tf en el gráfico y obtenga:

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

Estoy trabajando a través del tutorial TensorFlow , que utiliza un formato "extraño" para cargar los datos. Me gustaría usar el formato NumPy o pandas para los datos, para poder compararlo con los resultados de scikit-learn.

Recibo los datos de reconocimiento de dígitos de Kaggle: https://www.kaggle.com/c/digit-recognizer/data .

Aquí el código del tutorial TensorFlow (que 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í leo los datos, elimino las variables objetivo y divido los datos en conjuntos de datos de prueba y entrenamiento (todo esto 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 entrenamiento, obtengo 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 esto?


Cuando tuve este problema con tf.train.string_input_producer() y tf.train.batch() inicializando las variables locales antes de comenzar, el Coordinador resolvió el problema. Recibí el error cuando inicialicé las variables locales después de iniciar el Coordinador.


De la documentación oficial, FailedPreconditionError

Esta excepción se genera más comúnmente cuando se ejecuta una operación que lee un tf. Variable antes de que se haya inicializado.

En su caso, el error incluso explica qué variable no se inicializó: Attempting to use uninitialized value Variable_1 . Uno de los tutoriales de TF explica mucho sobre las variables, su creation/initialization/saving/loading

Básicamente para inicializar la variable tienes 3 opciones:

Casi siempre uso el primer enfoque. Recuerde que debe ponerlo dentro de una sesión ejecutada. Entonces obtendrás algo como esto:

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

Si tiene curiosidad por obtener más información sobre las variables, lea esta documentación para saber cómo report_uninitialized_variables y marque is_variable_initialized .


Debe inicializar las variables antes de usarlas.

Si intenta evaluar las variables antes de inicializarlas, se encontrará con: FailedPreconditionError: Attempting to use uninitialized value tensor.

La forma más fácil es inicializar todas las variables a la vez usando: tf.global_variables_initializer()

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

Utiliza sess.run(init) para ejecutar el inicializador, sin obtener ningún valor.

Para inicializar solo un subconjunto de variables, use tf.variables_initializer() enumera las variables:

var_ab = tf.variables_initializer([a, b], name="a_and_b") with tf.Session() as sess: sess.run(var_ab)

También puede inicializar cada variable por separado usando tf.Variable.initializer

# create variable W as 784 x 10 tensor, filled with zeros W = tf.Variable(tf.zeros([784,10])) with tf.Session() as sess: sess.run(W.initializer)


El FailedPreconditionError surge porque el programa está intentando leer una variable (denominada "Variable_1" ) antes de que se haya inicializado. En TensorFlow, todas las variables deben inicializarse explícitamente, ejecutando sus operaciones "inicializadoras". Para mayor comodidad, puede ejecutar todos los inicializadores variables en la sesión actual ejecutando la siguiente instrucción antes de su ciclo de entrenamiento:

tf.initialize_all_variables().run()

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

init_op = tf.initialize_all_variables() sess = tf.Session() sess.run(init_op)


Posiblemente algo ha cambiado en las compilaciones recientes de TensorFlow, porque para mí, ejecutar

sess = tf.Session() sess.run(tf.local_variables_initializer())

antes de ajustar cualquier modelo parece hacer el truco. La mayoría de los ejemplos y comentarios más antiguos parecen sugerir tf.global_variables_initializer() .


Recibí este mensaje de error de un caso completamente diferente. Parecía que el controlador de excepciones en tensorflow lo levantó. Puede verificar cada fila en el rastreo. En mi caso, sucedió en tensorflow/python/lib/io/file_io.py , porque este archivo contenía un error diferente, donde self.__mode y self.__name no se inicializaron, y necesitaba llamar self._FileIO__mode , y self_FileIO__name en self_FileIO__name lugar.


tf.initialize_all_variables() está en desuso. En su lugar, inicialice las variables de tensorflow con:

tf.global_variables_initializer()

Un ejemplo de uso común es:

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


FailedPreconditionError se produce porque la sesión está intentando leer una variable que no se ha inicializado.

A partir de la versión 1.11.0 de Tensorflow, debe tomar esto:

init_op = tf.global_variables_initializer() sess = tf.Session() sess.run(init_op)