Tensorflow: Au moment de l'exécution : "Erreur lors de la lecture de la variable de ressource softmax/kernel à partir du conteneur : localhost"

Créé le 30 avr. 2019  ·  26Commentaires  ·  Source: tensorflow/tensorflow

Informations système

  • Ai-je écrit du code personnalisé (par opposition à l'utilisation d'un exemple de script fourni dans TensorFlow) : oui, trouvé ici (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • Plate-forme et distribution du système d'exploitation (par exemple, Linux Ubuntu 16.04) : MAC OSX 10.14.4
  • Version TensorFlow (utilisez la commande ci-dessous) : 2.0.0-alpha0
  • Version Python : Python 3.6.5

Vous pouvez collecter certaines de ces informations en utilisant notre capture d'environnement
python -c "importer tensorflow en tant que tf ; print(tf.version.GIT_VERSION, tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

Décrire le comportement actuel
lors de l'exécution de "flaskApp.py", après avoir chargé le modèle et essayé de classer une image à l'aide de "predict", cela échoue avec l'erreur :

tensorflow.python.framework.errors_impl.FailedPreconditionError : erreur lors de la lecture de la variable de ressource softmax/kernel à partir du conteneur : localhost. Cela peut signifier que la variable n'a pas été initialisée. Introuvable : la ressource localhost/softmax/kernel/N10tensorflow3VarE n'existe pas.

Décrire le comportement attendu
un résultat de classification d'image doit être renvoyé.

Code pour reproduire le problème
Étapes à reproduire :

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (au besoin) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • démarrez l'application avec flask run
  • en utilisant Postman ou curl, envoyez n'importe quelle image d'un chien ou d'un chat à l'application
    Screenshot 2019-04-30 at 16 10 57
    OU
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

Autres informations / journaux

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

Commentaire le plus utile

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

Tous les 26 commentaires

Des mises à jour à ce sujet ?

Il ne s'agit pas d'un problème de construction/installation ou de bogue/performance. Veuillez poster ce genre de questions d'assistance sur Stackoverflow . Il y a une grande communauté pour soutenir et apprendre de vos questions. GitHub est principalement destiné à résoudre les bogues d'installation et de performances. Merci!

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

Vous êtes incroyable!!!!! C'est la meilleure solution. Pouvez-vous me dire pourquoi cela a-t-il fonctionné après l'ajout de la session ?

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

Vous êtes incroyable!!!!! C'est la meilleure solution. Pouvez-vous me dire pourquoi cela a-t-il fonctionné après l'ajout de la session ?

Merci et vous êtes les bienvenus :).

Pour autant que je sache, le problème est que les graphes et les sessions Tensorflow ne sont pas thread-safe. Ainsi, par défaut, une nouvelle session (qui ne contient aucun poids précédemment chargé, modèles également) est créée pour chaque thread, c'est-à-dire pour chaque requête. En enregistrant la session globale qui contient tous vos modèles et en la définissant pour qu'elle soit utilisée par keras dans chaque thread, le problème est résolu.

Je ferme ce problème car je comprends qu'il est résolu, mais s'il vous plaît laissez-moi savoir si je me trompe. Merci!

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

Vous êtes incroyable!!!!! C'est la meilleure solution. Pouvez-vous me dire pourquoi cela a-t-il fonctionné après l'ajout de la session ?

Merci et vous êtes les bienvenus :).

Pour autant que je sache, le problème est que les graphes et les sessions Tensorflow ne sont pas thread-safe. Ainsi, par défaut, une nouvelle session (qui ne contient aucun poids précédemment chargé, modèles également) est créée pour chaque thread, c'est-à-dire pour chaque requête. En enregistrant la session globale qui contient tous vos modèles et en la définissant pour qu'elle soit utilisée par keras dans chaque thread, le problème est résolu.

J'ai le même problème avec la version 1.13.1 du flux de tenseur, la solution ci-dessus fonctionne pour moi.

J'ai les mêmes problèmes et je me demandais quelle était la valeur de some_custom_config ?

J'ai les mêmes problèmes et je me demandais quelle était la valeur de some_custom_config ?

Dans le cas où vous voudriez configurer votre session (ce que j'ai dû faire), vous pouvez passer la config dans ce paramètre. Sinon, laissez-le de côté.

J'ai les mêmes problèmes et je me demandais quelle était la valeur de some_custom_config ?

Dans le cas où vous voudriez configurer votre session (ce que j'ai dû faire), vous pouvez passer la config dans ce paramètre. Sinon, laissez-le de côté.

Merci beaucoup! Tout fonctionne parfaitement maintenant.

Merci d'avoir fourni les codes. J'ai rencontré un message d'erreur similaire lors de l'exécution de BERT sur Kera. J'ai essayé votre solution mais je n'arrive pas à la faire fonctionner. Toute orientation est la plus appréciée!

```FailedPreconditionError Traceback (appel le plus récent en dernier)
dans()
11 validation_data=([test_input_ids, test_input_masks, test_segment_ids], test_labels),
12 époques=1,
---> 13 taille_bat=32
14 )

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

FailedPreconditionError : erreur lors de la lecture de la variable de ressource bert_layer_9_module/bert/encoder/layer_3/output/LayerNorm/gamma à partir du conteneur : localhost. Cela peut signifier que la variable n'a pas été initialisée. Introuvable : la ressource localhost/bert_layer_9_module/bert/encoder/layer_3/output/LayerNorm/gamma/N10tensorflow3VarE n'existe pas.
[[{{nœud bert_layer_9/bert_layer_9_module_apply_tokens/bert/encoder/layer_3/output/LayerNorm/batchnorm/mul/ReadVariableOp}}]]```

J'ai une erreur similaire lors de l'utilisation d'incorporations Elmo de tf-hub à l'intérieur d'une couche keras personnalisée.

tensorflow.python.framework.errors_impl.FailedPreconditionError : 2 erreur(s) racine(s) trouvée(s).
(0) Échec de la condition préalable : erreur lors de la lecture de la variable de ressource ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry à partir du conteneur : localhost. Cela peut signifier que la variable n'a pas été initialisée. Introuvable : la ressource localhost/ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry/class tensorflow::Var n'existe pas.
[[{{node ElmoEmbeddingLayer/ElmoEmbeddingLayer_module_apply_default/bilm/add/ReadVariableOp}}]]
(1) Échec de la condition préalable : erreur lors de la lecture de la variable de ressource ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry à partir du conteneur : localhost. Cela peut signifier que la variable n'a pas été initialisée. Introuvable : la ressource localhost/ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry/class tensorflow::Var n'existe pas.
[[{{node ElmoEmbeddingLayer/ElmoEmbeddingLayer_module_apply_default/bilm/add/ReadVariableOp}}]]
[[metrics/acc/Identity/_199]]
0 opérations réussies.
0 erreurs dérivées ignorées.

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

Vous êtes incroyable!!!!! C'est la meilleure solution. Pouvez-vous me dire pourquoi cela a-t-il fonctionné après l'ajout de la session ?

Merci et vous êtes les bienvenus :).

Pour autant que je sache, le problème est que les graphes et les sessions Tensorflow ne sont pas thread-safe. Ainsi, par défaut, une nouvelle session (qui ne contient aucun poids précédemment chargé, modèles également) est créée pour chaque thread, c'est-à-dire pour chaque requête. En enregistrant la session globale qui contient tous vos modèles et en la définissant pour qu'elle soit utilisée par keras dans chaque thread, le problème est résolu.

Merci beaucoup pour cela.

Dans mon cas, je l'ai fait un peu différemment, au cas où cela aiderait quelqu'un :

# 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 nouveauté ici permet de charger plusieurs modèles (une fois) et de les utiliser dans plusieurs threads.
Par défaut, les Session "par défaut" et les Graph "par défaut" sont utilisés lors du chargement d'un modèle.
Mais ici, vous en créez de nouveaux.
Notez également que le Graph est stocké dans l'objet Session , ce qui est un peu plus pratique.

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

Vous êtes incroyable!!!!! C'est la meilleure solution. Pouvez-vous me dire pourquoi cela a-t-il fonctionné après l'ajout de la session ?

Merci et vous êtes les bienvenus :).
Pour autant que je sache, le problème est que les graphes et les sessions Tensorflow ne sont pas thread-safe. Ainsi, par défaut, une nouvelle session (qui ne contient aucun poids précédemment chargé, modèles également) est créée pour chaque thread, c'est-à-dire pour chaque requête. En enregistrant la session globale qui contient tous vos modèles et en la définissant pour qu'elle soit utilisée par keras dans chaque thread, le problème est résolu.

Merci beaucoup pour cela.

Dans mon cas, je l'ai fait un peu différemment, au cas où cela aiderait quelqu'un :

# 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 nouveauté ici permet de charger plusieurs modèles (une fois) et de les utiliser dans plusieurs threads.
Par défaut, les Session "par défaut" et les Graph "par défaut" sont utilisés lors du chargement d'un modèle.
Mais ici, vous en créez de nouveaux.
Notez également que le Graph est stocké dans l'objet Session , ce qui est un peu plus pratique.

Merci pour cette réponse
Je suis également confronté à ce problème lors de l'utilisation du flacon et du multithreading, @eliadl Votre solution a fonctionné pour moi.

Merci :souriant:

Informations système

  • Ai-je écrit du code personnalisé (par opposition à l'utilisation d'un exemple de script fourni dans TensorFlow) : oui, trouvé ici (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • Plate-forme et distribution du système d'exploitation (par exemple, Linux Ubuntu 16.04) : MAC OSX 10.14.4
  • Version TensorFlow (utilisez la commande ci-dessous) : 2.0.0-alpha0
  • Version Python : Python 3.6.5

Vous pouvez collecter certaines de ces informations en utilisant notre capture d'environnement
python -c "importer tensorflow en tant que tf ; print(tf.version.GIT_VERSION, tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

Décrire le comportement actuel
lors de l'exécution de "flaskApp.py", après avoir chargé le modèle et essayé de classer une image à l'aide de "predict", cela échoue avec l'erreur :

tensorflow.python.framework.errors_impl.FailedPreconditionError : erreur lors de la lecture de la variable de ressource softmax/kernel à partir du conteneur : localhost. Cela peut signifier que la variable n'a pas été initialisée. Introuvable : la ressource localhost/softmax/kernel/N10tensorflow3VarE n'existe pas.

Décrire le comportement attendu
un résultat de classification d'image doit être renvoyé.

Code pour reproduire le problème
Étapes à reproduire :

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (au besoin) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • démarrez l'application avec flask run
  • en utilisant Postman ou curl, envoyez n'importe quelle image d'un chien ou d'un chat à l'application
    Screenshot 2019-04-30 at 16 10 57
    OU
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

Autres informations / journaux

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}}]]

je suis également confronté à ce problème
tensorflow.python.framework.errors_impl.FailedPreconditionError : erreur lors de la lecture de la variable de ressource dense_6/kernel à partir du conteneur : localhost. Cela peut signifier que la variable n'a pas été initialisée. Introuvable : la ressource localhost/dense_6/kernel/class tensorflow::Var n'existe pas.
[[{{nœud dense_6/MatMul/ReadVariableOp}}]]

désolé, je suis également confronté à ce problème. Mais votre réponse ne résout pas mon problème, peut-être qu'elle est dans un état différent. Dans mon problème, c'est quand j'utilise VGG16 dans keras et que je veux utiliser la fonction d'itération
loss_value, grads_value = iterate([np.zeros((1, 150, 150, 3))])
Mais cette question similaire s'est produite.
FailedPreconditionError : erreur lors de la lecture de la variable de ressource block1_conv1_12/bias à partir du conteneur : localhost. Introuvable : la ressource localhost/block1_conv1_12/bias/N10tensorflow3VarE n'existe pas.[[{{node block1_conv1_12/BiasAdd/ReadVariableOp}}]]
Dans https://github.com/JarvisUSTC/deep-learning-with-python-notebooks/blob/master/5.4-visualizing-what-convnets-learn.ipynb , le problème n'a pas rencontré.
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

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

Vous êtes incroyable!!!!! C'est la meilleure solution. Pouvez-vous me dire pourquoi cela a-t-il fonctionné après l'ajout de la session ?

Merci et vous êtes les bienvenus :).
Pour autant que je sache, le problème est que les graphes et les sessions Tensorflow ne sont pas thread-safe. Ainsi, par défaut, une nouvelle session (qui ne contient aucun poids précédemment chargé, modèles également) est créée pour chaque thread, c'est-à-dire pour chaque requête. En enregistrant la session globale qui contient tous vos modèles et en la définissant pour qu'elle soit utilisée par keras dans chaque thread, le problème est résolu.

J'ai le même problème avec la version 1.13.1 du flux de tenseur, la solution ci-dessus fonctionne pour moi.

Cette solution a également fonctionné pour moi. Merci @eliadl

Dans TF 2.x, il n'y a pas de session(). Comment je le répare? le même problème se produit dans mon code TF 2.x.

@SungmanHong au lieu de tf.Session essayez d'utiliser tf.compat.v1.Session .

Dans TF 2.x, il n'y a pas de session(). Comment je le répare? le même problème se produit dans mon code TF 2.x.

importer une session dans TF 2.X
tf.compat.v1.Session()
importer keras.backend.get_session dans TF 2.X
tf.compat.v1.keras.backend.get_session()

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

Cela a fonctionné pour moi, merci

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

Mec tu es génial et génial, tu viens de sauver mon projet, merci beaucoup

Dans TF 2.x, il n'y a pas de session(). Comment je le répare? le même problème se produit dans mon code TF 2.x.

importer une session dans TF 2.X
tf.compat.v1.Session()
importer keras.backend.get_session dans TF 2.X
tf.compat.v1.keras.backend.get_session()

J'ai utilisé la solution donnée mais cela ne fonctionne toujours pas pour moi, j'obtiens l'erreur

`` 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.Classe
UserWarning('Utilisation d'un générateur avec use_multiprocessing=True '

Epoque 1/4

FailedPreconditionError Traceback (appel le plus récent en dernier)
dans()
4 learning_rate=config.LEARNING_RATE,
5 époques=4,
----> 6 couches='têtes')

6 cadres
/usr/local/lib/python3.6/dist-packages/mrcnn/model.py dans train(self, train_dataset, val_dataset, learning_rate, époques, couches, augmentation)
2350 max_queue_size=100,
2351 ouvriers=ouvriers,
-> 2352 use_multiprocessing=True,
2353 )
2354 self.epoch = max(self.epoch, époques)

/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py dans wrapper( args, * kwargs)
89 warnings.warn('Mettre à jour votre appel ' + object_name + ' vers le ' +
90 'Keras 2 API : ' + signature, stacklevel=2)
---> 91 return func( args, * kwargs)
92 wrapper._original_function = func
93 emballage de retour

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

/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py in fit_generator(model, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, validation_freq, class_weight, max_queue_size, workers, use_multiprocessing , shuffle, initial_epoch)
218 sample_weight=sample_weight,
219 class_weight=class_weight,
--> 220 reset_metrics=Faux)
221
222 sorties = to_list(sorties)

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

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/backend.py dans __call__(self, entrées)
3630
3631 récupéré = self._callable_fn(*array_vals,
-> 3632 run_metadata=self.run_metadata)
3633 self._call_fetch_callbacks(fetched[-len(self._fetches):])
3634 output_structure = nest.pack_sequence_as(

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

FailedPreconditionError : erreur lors de la lecture des ancres de la variable de ressource/Variable du conteneur : localhost. Cela peut signifier que la variable n'a pas été initialisée. Introuvable : la ressource localhost/anchors/Variable/N10tensorflow3VarE n'existe pas.
[[{{node ROI/ReadVariableOp}}]] ```

AIDEZ SVP !!!

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

Vous êtes incroyable!!!!! C'est la meilleure solution. Pouvez-vous me dire pourquoi cela a-t-il fonctionné après l'ajout de la session ?

Merci et vous êtes les bienvenus :).

Pour autant que je sache, le problème est que les graphes et les sessions Tensorflow ne sont pas thread-safe. Ainsi, par défaut, une nouvelle session (qui ne contient aucun poids précédemment chargé, modèles également) est créée pour chaque thread, c'est-à-dire pour chaque requête. En enregistrant la session globale qui contient tous vos modèles et en la définissant pour qu'elle soit utilisée par keras dans chaque thread, le problème est résolu.

Veuillez indiquer que some_custom_config n'est pas défini

Veuillez indiquer que some_custom_config n'est pas défini

J'ai eu le même problème dans tensorflow 1.13.1 que j'ai résolu en créant une référence à la session utilisée pour charger les modèles, puis en la définissant pour qu'elle soit utilisée par keras dans chaque requête. C'est-à-dire que j'ai fait ce qui suit :

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

puis dans chaque requête (c'est-à-dire dans chaque fil) :

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

le travail est pour moi, merci !!

Cette page vous a été utile?
0 / 5 - 0 notes