Tensorflow: En tiempo de ejecución: "Error al leer la variable de recurso softmax / kernel del contenedor: localhost"

Creado en 30 abr. 2019  ·  26Comentarios  ·  Fuente: tensorflow/tensorflow

Información del sistema

  • ¿He escrito un código personalizado (en lugar de usar un script de ejemplo de stock provisto en TensorFlow): sí, se encuentra aquí (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • Plataforma y distribución del sistema operativo (por ejemplo, Linux Ubuntu 16.04): MAC OSX 10.14.4
  • Versión de TensorFlow (use el comando a continuación): 2.0.0-alpha0
  • Versión de Python: Python 3.6.5

Puede recopilar parte de esta información utilizando nuestra captura de entorno
python -c "importar tensorflow como tf; print (tf.version.GIT_VERSION, tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

Describe el comportamiento actual
al ejecutar "flaskApp.py", después de cargar el modelo e intentar clasificar una imagen usando "predecir", falla con el error:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Error al leer la variable de recurso softmax / kernel del contenedor: localhost. Esto podría significar que la variable no estaba inicializada. No encontrado: el recurso localhost / softmax / kernel / N10tensorflow3VarE no existe.

Describe el comportamiento esperado
debe devolverse un resultado de la clasificación de la imagen.

Código para reproducir el problema
Pasos para reproducir:

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (si es necesario) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • inicie la aplicación con flask run
  • usando Postman o curl envía cualquier imagen de un perro o gato a la aplicación
    Screenshot 2019-04-30 at 16 10 57
    O
curl -X POST \
  http://localhost:5000/net/MobileNet \
  -H 'Postman-Token: ea35b79b-b34d-4be1-a80c-505c104050ec' \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -F image=@/Users/haitham.b/Projects/ResearchProjects/CNNs/deeplearning-showcase/data/sample/valid/dogs/dog.1008.jpg

Otra información / registros

E0430 13:36:10.374372 123145501933568 app.py:1761] Exception on /net/MobileNet [POST]
Traceback (most recent call last):
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/haitham.b/Projects/Virtualenvs/deeplearning-showcase/flaskApp.py", line 97, in use_net_to_classify_image
    prediction, prob = predict(net_name, image)
  File "/Users/haitham.b/Projects/Virtualenvs/deeplearning-showcase/flaskApp.py", line 59, in predict
    output_probability = net_models[cnn_name].predict(post_processed_input_images)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1167, in predict
    callbacks=callbacks)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_arrays.py", line 352, in model_iteration
    batch_outs = f(ins_batch)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/backend.py", line 3096, in __call__
    run_metadata=self.run_metadata)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1440, in __call__
    run_metadata_ptr)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py", line 548, in __exit__
    c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable softmax/kernel from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/softmax/kernel/N10tensorflow3VarE does not exist.
     [[{{node softmax/MatMul/ReadVariableOp}}]]
TF 2.0 ops awaiting response support

Comentario más útil

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

Todos 26 comentarios

¿Alguna actualización sobre esto?

Este no es un problema de compilación / instalación o error / rendimiento. Publique este tipo de preguntas de soporte en Stackoverflow . Existe una gran comunidad para apoyar y aprender de sus preguntas. GitHub es principalmente para solucionar errores en la instalación y el rendimiento. ¡Gracias!

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

¡¡¡¡¡Eres fabuloso!!!!! Esta es la mejor solución. ¿Puedes decirme por qué funcionó después de agregar la sesión?

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

¡¡¡¡¡Eres fabuloso!!!!! Esta es la mejor solución. ¿Puedes decirme por qué funcionó después de agregar la sesión?

Gracias y de nada :).

Por lo que tengo entendido, el problema es que los gráficos y las sesiones de tensorflow no son seguros para subprocesos. Entonces, de manera predeterminada, se crea una nueva sesión (que no contiene ningún peso cargado previamente, modelos, etc.) para cada hilo, es decir, para cada solicitud. Al guardar la sesión global que contiene todos sus modelos y configurarla para que sea utilizada por keras en cada hilo, se resuelve el problema.

Cerrando esto porque tengo entendido que está resuelto, pero avíseme si me equivoco. ¡Gracias!

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

¡¡¡¡¡Eres fabuloso!!!!! Esta es la mejor solución. ¿Puedes decirme por qué funcionó después de agregar la sesión?

Gracias y de nada :).

Por lo que tengo entendido, el problema es que los gráficos y las sesiones de tensorflow no son seguros para subprocesos. Entonces, de manera predeterminada, se crea una nueva sesión (que no contiene ningún peso cargado previamente, modelos, etc.) para cada hilo, es decir, para cada solicitud. Al guardar la sesión global que contiene todos sus modelos y configurarla para que sea utilizada por keras en cada hilo, se resuelve el problema.

Tengo el mismo problema con la versión 1.13.1 de tensor flow, la solución anterior funciona para mí.

Tengo los mismos problemas y me preguntaba cuál era el valor de some_custom_config.

Tengo los mismos problemas y me preguntaba cuál era el valor de some_custom_config.

En caso de que desee configurar su sesión (lo que tuve que hacer), puede pasar la configuración en este parámetro. De lo contrario, déjelo fuera.

Tengo los mismos problemas y me preguntaba cuál era el valor de some_custom_config.

En caso de que desee configurar su sesión (lo que tuve que hacer), puede pasar la configuración en este parámetro. De lo contrario, déjelo fuera.

¡Muchas gracias! Todo está funcionando perfectamente ahora.

Gracias por proporcionar los códigos. Me encontré con un mensaje de error similar mientras ejecutaba BERT en Kera. Probé tu solución, pero parece que no puedo hacer que funcione. ¡Cualquier orientación es muy apreciada!

`` `FailedPreconditionError Traceback (última llamada más reciente)
en()
11 validation_data = ([test_input_ids, test_input_masks, test_segment_ids], test_labels),
12 épocas = 1,
---> 13 tamaño_lote = 32
14)

3 cuadros
/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py en __call __ (self, args, * kwargs)
1456 ret = tf_session.TF_SessionRunCallable (self._session._session,
1457 self._handle, argumentos,
-> 1458 run_metadata_ptr)
1459 si run_metadata:
1460 proto_data = tf_session.TF_GetBuffer (run_metadata_ptr)

FailedPreconditionError: Error al leer la variable de recurso bert_layer_9_module / bert / encoder / layer_3 / output / LayerNorm / gamma del contenedor: localhost. Esto podría significar que la variable no estaba inicializada. No encontrado: el recurso localhost / bert_layer_9_module / bert / encoder / layer_3 / output / LayerNorm / gamma / N10tensorflow3VarE no existe.
[[{{node bert_layer_9 / bert_layer_9_module_apply_tokens / bert / encoder / layer_3 / output / LayerNorm / batchnorm / mul / ReadVariableOp}}]] ``

Tengo un error similar al usar incrustaciones de Elmo desde tf-hub dentro de una capa personalizada de keras.

tensorflow.python.framework.errors_impl.FailedPreconditionError: Se encontraron 2 errores de raíz.
(0) Condición previa fallida: Error al leer la variable de recurso ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry desde Container: localhost. Esto podría significar que la variable no estaba inicializada. No encontrado: recurso localhost / ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry / class tensorflow :: Var no existe.
[[{{node ElmoEmbeddingLayer / ElmoEmbeddingLayer_module_apply_default / bilm / add / ReadVariableOp}}]]
(1) Condición previa fallida: Error al leer la variable de recurso ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry desde Container: localhost. Esto podría significar que la variable no estaba inicializada. No encontrado: recurso localhost / ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry / class tensorflow :: Var no existe.
[[{{node ElmoEmbeddingLayer / ElmoEmbeddingLayer_module_apply_default / bilm / add / ReadVariableOp}}]]
[[metrics / acc / Identity / _199]]
0 operaciones exitosas.
0 errores derivados ignorados.

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

¡¡¡¡¡Eres fabuloso!!!!! Esta es la mejor solución. ¿Puedes decirme por qué funcionó después de agregar la sesión?

Gracias y de nada :).

Por lo que tengo entendido, el problema es que los gráficos y las sesiones de tensorflow no son seguros para subprocesos. Entonces, de manera predeterminada, se crea una nueva sesión (que no contiene ningún peso cargado previamente, modelos, etc.) para cada hilo, es decir, para cada solicitud. Al guardar la sesión global que contiene todos sus modelos y configurarla para que sea utilizada por keras en cada hilo, se resuelve el problema.

Muchas gracias por esto.

En mi caso lo hice un poco diferente, en caso de que ayude a alguien:

# on thread 1
session = tf.Session(graph=tf.Graph())
with session.graph.as_default():
    k.backend.set_session(session)
    model = k.models.load_model(filepath)

# on thread 2
with session.graph.as_default():
    k.backend.set_session(session)
    model.predict(x, **kwargs)

La novedad aquí es permitir que se carguen varios modelos (una vez) y se utilicen en varios subprocesos.
Por defecto, el "predeterminado" Session y el "predeterminado" Graph se utilizan al cargar un modelo.
Pero aquí creas otros nuevos.
También tenga en cuenta que Graph se almacena en el objeto Session , que es un poco más conveniente.

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

¡¡¡¡¡Eres fabuloso!!!!! Esta es la mejor solución. ¿Puedes decirme por qué funcionó después de agregar la sesión?

Gracias y de nada :).
Por lo que tengo entendido, el problema es que los gráficos y las sesiones de tensorflow no son seguros para subprocesos. Entonces, de manera predeterminada, se crea una nueva sesión (que no contiene ningún peso cargado previamente, modelos, etc.) para cada hilo, es decir, para cada solicitud. Al guardar la sesión global que contiene todos sus modelos y configurarla para que sea utilizada por keras en cada hilo, se resuelve el problema.

Muchas gracias por esto.

En mi caso lo hice un poco diferente, en caso de que ayude a alguien:

# on thread 1
session = tf.Session(graph=tf.Graph())
with session.graph.as_default():
    k.backend.set_session(session)
    model = k.models.load_model(filepath)

# on thread 2
with session.graph.as_default():
    k.backend.set_session(session)
    model.predict(x, **kwargs)

La novedad aquí es permitir que se carguen varios modelos (una vez) y se utilicen en varios subprocesos.
Por defecto, el "predeterminado" Session y el "predeterminado" Graph se utilizan al cargar un modelo.
Pero aquí creas otros nuevos.
También tenga en cuenta que Graph se almacena en el objeto Session , que es un poco más conveniente.

Gracias por esta respuesta
También me enfrento a este problema cuando utilizo frasco y subprocesos @eliadl Su solución funcionó para mí.

Gracias: smiley:

Información del sistema

  • ¿He escrito un código personalizado (en lugar de usar un script de ejemplo de stock provisto en TensorFlow): sí, se encuentra aquí (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • Plataforma y distribución del sistema operativo (por ejemplo, Linux Ubuntu 16.04): MAC OSX 10.14.4
  • Versión de TensorFlow (use el comando a continuación): 2.0.0-alpha0
  • Versión de Python: Python 3.6.5

Puede recopilar parte de esta información utilizando nuestra captura de entorno
python -c "importar tensorflow como tf; print (tf.version.GIT_VERSION, tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

Describe el comportamiento actual
al ejecutar "flaskApp.py", después de cargar el modelo e intentar clasificar una imagen usando "predecir", falla con el error:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Error al leer la variable de recurso softmax / kernel del contenedor: localhost. Esto podría significar que la variable no estaba inicializada. No encontrado: el recurso localhost / softmax / kernel / N10tensorflow3VarE no existe.

Describe el comportamiento esperado
debe devolverse un resultado de la clasificación de la imagen.

Código para reproducir el problema
Pasos para reproducir:

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (si es necesario) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • inicie la aplicación con flask run
  • usando Postman o curl envía cualquier imagen de un perro o gato a la aplicación
    Screenshot 2019-04-30 at 16 10 57
    O
curl -X POST \
  http://localhost:5000/net/MobileNet \
  -H 'Postman-Token: ea35b79b-b34d-4be1-a80c-505c104050ec' \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -F image=@/Users/haitham.b/Projects/ResearchProjects/CNNs/deeplearning-showcase/data/sample/valid/dogs/dog.1008.jpg

Otra información / registros

E0430 13:36:10.374372 123145501933568 app.py:1761] Exception on /net/MobileNet [POST]
Traceback (most recent call last):
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/haitham.b/Projects/Virtualenvs/deeplearning-showcase/flaskApp.py", line 97, in use_net_to_classify_image
    prediction, prob = predict(net_name, image)
  File "/Users/haitham.b/Projects/Virtualenvs/deeplearning-showcase/flaskApp.py", line 59, in predict
    output_probability = net_models[cnn_name].predict(post_processed_input_images)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1167, in predict
    callbacks=callbacks)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_arrays.py", line 352, in model_iteration
    batch_outs = f(ins_batch)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/backend.py", line 3096, in __call__
    run_metadata=self.run_metadata)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1440, in __call__
    run_metadata_ptr)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py", line 548, in __exit__
    c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable softmax/kernel from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/softmax/kernel/N10tensorflow3VarE does not exist.
   [[{{node softmax/MatMul/ReadVariableOp}}]]

También estoy enfrentando este problema
tensorflow.python.framework.errors_impl.FailedPreconditionError: Error al leer la variable de recurso dense_6 / kernel del contenedor: localhost. Esto podría significar que la variable no estaba inicializada. No encontrado: el recurso localhost / dense_6 / kernel / class tensorflow :: Var no existe.
[[{{node dense_6 / MatMul / ReadVariableOp}}]]

lo siento, también estoy enfrentando este problema. Pero tu respuesta no soluciona mi problema, tal vez esté en una condición diferente. En mi problema, es cuando uso VGG16 en keras y quiero usar la función iterativa
loss_value, grads_value = iterate([np.zeros((1, 150, 150, 3))])
Pero ocurrió esta pregunta similar.
FailedPreconditionError: Error al leer la variable de recurso block1_conv1_12 / bias del contenedor: localhost. No encontrado: el recurso localhost / block1_conv1_12 / bias / N10tensorflow3VarE no existe.[[{{node block1_conv1_12 / BiasAdd / ReadVariableOp}}]]
En https://github.com/JarvisUSTC/deep-learning-with-python-notebooks/blob/master/5.4-visualizing-what-convnets-learn.ipynb , no se encontró el problema.
image

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model
from tensorflow.python.keras.applications import VGG16

sess = tf.Session()
graph = tf.get_default_graph()

set_session(sess)

#model = load_model('vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5')
model = VGG16(weights='imagenet',include_top=False)

layer_name = 'block3_conv1'
filter_index = 0

layer_output = model.get_layer(layer_name).output
loss = K.mean(layer_output[:, :, :, filter_index])
grads = K.gradients(loss, model.input)[0]
grads /= (K.sqrt(K.mean(K.square(grads))) + 1e-5)

import numpy as np
global sess
global graph
with graph.as_default():
    set_session(sess)
    iterate = K.function([model.input], [loss, grads])
    loss_value, grads_value = iterate([np.zeros((1, 150, 150, 3))])

image

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

¡¡¡¡¡Eres fabuloso!!!!! Esta es la mejor solución. ¿Puedes decirme por qué funcionó después de agregar la sesión?

Gracias y de nada :).
Por lo que tengo entendido, el problema es que los gráficos y las sesiones de tensorflow no son seguros para subprocesos. Entonces, de manera predeterminada, se crea una nueva sesión (que no contiene ningún peso cargado previamente, modelos, etc.) para cada hilo, es decir, para cada solicitud. Al guardar la sesión global que contiene todos sus modelos y configurarla para que sea utilizada por keras en cada hilo, se resuelve el problema.

Tengo el mismo problema con la versión 1.13.1 de tensor flow, la solución anterior funciona para mí.

Esta solución también funcionó para mí .. Gracias @eliadl

En TF 2.x, no hay sesión (). como lo soluciono El mismo problema está sucediendo en mi código TF 2.x.

@SungmanHong en lugar de tf.Session intenta usar tf.compat.v1.Session .

En TF 2.x, no hay sesión (). como lo soluciono El mismo problema está sucediendo en mi código TF 2.x.

importar sesión en TF 2.X
tf.compat.v1.Session()
importar keras.backend.get_session en TF 2.X
tf.compat.v1.keras.backend.get_session()

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

Esto funcionó para mí, gracias

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

Hombre, eres un genio e increíble, acabas de guardar mi proyecto, muchas gracias.

En TF 2.x, no hay sesión (). como lo soluciono El mismo problema está sucediendo en mi código TF 2.x.

importar sesión en TF 2.X
tf.compat.v1.Session()
importar keras.backend.get_session en TF 2.X
tf.compat.v1.keras.backend.get_session()

He usado la solución dada pero todavía no me funcionó, recibo el error

`` The graph tensor has name: anchors/Variable:0 /usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py:49: UserWarning: Using a generator with use_multiprocessing = True and multiple workers may duplicate your data. Please consider using the keras.utils.Sequence clase.
UserWarning ('Usando un generador con use_multiprocessing=True '

Época 1/4

FailedPreconditionError Traceback (última llamada más reciente)
en()
4 learning_rate = config.LEARNING_RATE,
5 épocas = 4,
----> 6 capas = 'cabezas')

6 cuadros
/usr/local/lib/python3.6/dist-packages/mrcnn/model.py en tren (self, train_dataset, val_dataset, learning_rate, épocas, capas, aumento)
2350 max_queue_size = 100,
2351 trabajadores = trabajadores,
-> 2352 use_multiprocessing = True,
2353)
2354 self.epoch = max (self.epoch, épocas)

/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py en contenedor ( args, * kwargs)
89 warnings.warn ('Actualice su llamada ' + object_name + ' al' +
90 'API Keras 2:' + firma, nivel de pila = 2)
---> 91 return func ( args, * kwargs)
92 envoltorio._función_original = func
93 envoltura de devolución

/usr/local/lib/python3.6/dist-packages/keras/engine/training.py en fit_generator (self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, validation_freq, class_weight, max_queue_size_sultiprocessing_m , shuffle, initial_epoch)
1730 use_multiprocessing = use_multiprocessing,
1731 shuffle = shuffle,
-> 1732 initial_epoch = initial_epoch)
1733
1734 @ interfaces.legacy_generator_methods_support

/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py en fit_generator (modelo, generador, pasos_por_epoch, épocas, detallado, devoluciones de llamada, validation_data, validation_steps, validation_freq, class_weight, max_queue_size_multiprocess, trabajadores, , shuffle, initial_epoch)
218 peso_muestra = peso_muestra,
219 peso_clase = peso_clase,
-> 220 reset_metrics = Falso)
221
222 salidas = to_list (salidas)

/usr/local/lib/python3.6/dist-packages/keras/engine/training.py en train_on_batch (self, x, y, sample_weight, class_weight, reset_metrics)
1512 ins = x + y + pesos_muestra
1513 self._make_train_function ()
-> 1514 salidas = self.train_function (ins)
1515
1516 si reset_metrics:

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/backend.py en __call __ (auto, entradas)
3630
3631 obtenido = self._callable_fn (* valores_matriz,
-> 3632 run_metadata = self.run_metadata)
3633 self._call_fetch_callbacks (obtenido [-len (self.fetches):])
3634 estructura_de_salida = nest.pack_sequence_as (

/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py en __call __ (self, args, * kwargs)
1470 ret = tf_session.TF_SessionRunCallable (self._session._session,
1471 self._handle, argumentos,
-> 1472 run_metadata_ptr)
1473 si run_metadata:
1474 proto_data = tf_session.TF_GetBuffer (run_metadata_ptr)

FailedPreconditionError: Error al leer los anclajes de la variable de recurso / Variable del contenedor: localhost. Esto podría significar que la variable no estaba inicializada. No encontrado: el recurso localhost / anchors / Variable / N10tensorflow3VarE no existe.
[[{{ROI del nodo / ReadVariableOp}}]] ``

¡¡¡POR FAVOR AYUDA!!!

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

¡¡¡¡¡Eres fabuloso!!!!! Esta es la mejor solución. ¿Puedes decirme por qué funcionó después de agregar la sesión?

Gracias y de nada :).

Por lo que tengo entendido, el problema es que los gráficos y las sesiones de tensorflow no son seguros para subprocesos. Entonces, de manera predeterminada, se crea una nueva sesión (que no contiene ningún peso cargado previamente, modelos, etc.) para cada hilo, es decir, para cada solicitud. Al guardar la sesión global que contiene todos sus modelos y configurarla para que sea utilizada por keras en cada hilo, se resuelve el problema.

Por favor, muestra some_custom_config no definido

Por favor, muestra some_custom_config no definido

Tuve el mismo problema en tensorflow 1.13.1 que resolví creando una referencia a la sesión que se usa para cargar los modelos y luego configurarla para que la use keras en cada solicitud. Es decir, he hecho lo siguiente:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

y luego en cada solicitud (es decir, en cada hilo):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

el trabajo es para mi, gracias !!

¿Fue útil esta página
0 / 5 - 0 calificaciones