Tensorflow: Zur Laufzeit: "Fehler beim Lesen der Ressourcenvariablen softmax/kernel aus Container: localhost"

Erstellt am 30. Apr. 2019  ·  26Kommentare  ·  Quelle: tensorflow/tensorflow

System Information

  • Habe ich benutzerdefinierten Code geschrieben (anstatt ein in TensorFlow bereitgestelltes Standard-Beispielskript zu verwenden): Ja, hier gefunden (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • Betriebssystemplattform und -verteilung (z. B. Linux Ubuntu 16.04): MAC OSX 10.14.4
  • TensorFlow-Version (verwenden Sie den Befehl unten): 2.0.0-alpha0
  • Python-Version: Python 3.6.5

Sie können einige dieser Informationen mithilfe unserer Umgebungserfassung erfassen
python -c "tensorflow als tf importieren; print(tf.version.GIT_VERSION, tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

Beschreiben Sie das aktuelle Verhalten
Wenn Sie "flaskApp.py" ausführen, schlägt es nach dem Laden des Modells und dem Versuch, ein Bild mit "predict" zu klassifizieren, mit dem Fehler fehl:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Fehler beim Lesen der Ressourcenvariablen softmax/kernel aus Container: localhost. Dies könnte bedeuten, dass die Variable nicht initialisiert wurde. Nicht gefunden: Ressource localhost/softmax/kernel/N10tensorflow3VarE existiert nicht.

Beschreiben Sie das erwartete Verhalten
ein Ergebnis der Bildklassifizierung sollte zurückgegeben werden.

Code zum Reproduzieren des Problems
Schritte zum Reproduzieren:

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (falls erforderlich) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • starte die App mit flask run
  • Senden Sie mit Postman oder curl ein beliebiges Bild eines Hundes oder einer Katze an die App
    Screenshot 2019-04-30 at 16 10 57
    ODER
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

Sonstige Infos / Protokolle

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

Hilfreichster Kommentar

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Alle 26 Kommentare

Irgendwelche Updates dazu?

Dies ist kein Build-/Installations- oder Bug-/Leistungsproblem. Bitte stellen Sie diese Art von Support-Fragen bei Stackoverflow . Es gibt eine große Community, die Sie unterstützt und von Ihren Fragen lernt. GitHub dient hauptsächlich der Behebung von Fehlern bei der Installation und Leistung. Vielen Dank!

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Du bist unglaublich!!!!! Dies ist die beste Lösung. Können Sie mir sagen, warum es nach dem Hinzufügen der Sitzung funktioniert hat?

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Du bist unglaublich!!!!! Dies ist die beste Lösung. Können Sie mir sagen, warum es nach dem Hinzufügen der Sitzung funktioniert hat?

Vielen Dank und Sie sind herzlich willkommen :).

Soweit ich weiß, besteht das Problem darin, dass Tensorflow-Graphen und -Sitzungen nicht threadsicher sind. Standardmäßig wird also für jeden Thread, dh für jede Anfrage, eine neue Sitzung (die keine zuvor geladenen Gewichte, Modelle usw. enthält) erstellt. Indem Sie die globale Sitzung, die alle Ihre Modelle enthält, speichern und sie so einstellen, dass sie von Keras in jedem Thread verwendet wird, wird das Problem gelöst.

Ich schließe dies aus, da ich verstehe, dass es gelöst werden soll, aber bitte lassen Sie es mich wissen, wenn ich mich irre. Vielen Dank!

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Du bist unglaublich!!!!! Dies ist die beste Lösung. Können Sie mir sagen, warum es nach dem Hinzufügen der Sitzung funktioniert hat?

Vielen Dank und Sie sind herzlich willkommen :).

Soweit ich weiß, besteht das Problem darin, dass Tensorflow-Graphen und -Sitzungen nicht threadsicher sind. Standardmäßig wird also für jeden Thread, dh für jede Anfrage, eine neue Sitzung (die keine zuvor geladenen Gewichte, Modelle usw. enthält) erstellt. Indem Sie die globale Sitzung, die alle Ihre Modelle enthält, speichern und sie so einstellen, dass sie von Keras in jedem Thread verwendet wird, wird das Problem gelöst.

Ich habe das gleiche Problem mit Tensor Flow Version 1.13.1, die obige Lösung funktioniert für mich.

Ich habe die gleichen Probleme und frage mich, was der Wert von some_custom_config war?

Ich habe die gleichen Probleme und frage mich, was der Wert von some_custom_config war?

Falls Sie Ihre Sitzung konfigurieren möchten (was ich tun musste), können Sie die Konfiguration in diesem Parameter übergeben. Ansonsten lass es einfach weg.

Ich habe die gleichen Probleme und frage mich, was der Wert von some_custom_config war?

Falls Sie Ihre Sitzung konfigurieren möchten (was ich tun musste), können Sie die Konfiguration in diesem Parameter übergeben. Ansonsten lass es einfach weg.

Ich danke dir sehr! Alles läuft jetzt perfekt.

Danke für die Bereitstellung der Codes. Ich habe eine ähnliche Fehlermeldung erhalten, als ich BERT auf Kera ausgeführt habe. Ich habe deine Lösung probiert, bekomme sie aber nicht zum Laufen. Jede Anleitung wird sehr geschätzt!

```FailedPreconditionError Traceback (letzter Aufruf zuletzt)
in()
11validation_data=([test_input_ids, test_input_masks, test_segment_ids], test_labels),
12 Epochen=1,
---> 13 batch_size=32
14)

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

FailedPreconditionError: Fehler beim Lesen der Ressourcenvariablen bert_layer_9_module/bert/encoder/layer_3/output/LayerNorm/gamma aus Container: localhost. Dies könnte bedeuten, dass die Variable nicht initialisiert wurde. Nicht gefunden: Ressource localhost/bert_layer_9_module/bert/encoder/layer_3/output/LayerNorm/gamma/N10tensorflow3VarE existiert nicht.
[[{{node bert_layer_9/bert_layer_9_module_apply_tokens/bert/encoder/layer_3/output/LayerNorm/batchnorm/mul/ReadVariableOp}}]]```

Ich habe einen ähnlichen Fehler, wenn ich Elmo-Einbettungen von tf-hub in einer benutzerdefinierten Keras-Ebene verwende.

tensorflow.python.framework.errors_impl.FailedPreconditionError: 2 Root-Fehler gefunden.
(0) Fehlgeschlagene Vorbedingung: Fehler beim Lesen der Ressourcenvariablen ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry aus Container: localhost. Dies könnte bedeuten, dass die Variable nicht initialisiert wurde. Nicht gefunden: Ressource localhost/ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry/class tensorflow::Var existiert nicht.
[[{{Knoten ElmoEmbeddingLayer/ElmoEmbeddingLayer_module_apply_default/bilm/add/ReadVariableOp}}]]
(1) Fehlgeschlagene Vorbedingung: Fehler beim Lesen der Ressourcenvariablen ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry aus Container: localhost. Dies könnte bedeuten, dass die Variable nicht initialisiert wurde. Nicht gefunden: Ressource localhost/ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry/class tensorflow::Var existiert nicht.
[[{{Knoten ElmoEmbeddingLayer/ElmoEmbeddingLayer_module_apply_default/bilm/add/ReadVariableOp}}]]
[[metrics/acc/Identity/_199]]
0 erfolgreiche Operationen.
0 abgeleitete Fehler ignoriert.

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Du bist unglaublich!!!!! Dies ist die beste Lösung. Können Sie mir sagen, warum es nach dem Hinzufügen der Sitzung funktioniert hat?

Vielen Dank und Sie sind herzlich willkommen :).

Soweit ich weiß, besteht das Problem darin, dass Tensorflow-Graphen und -Sitzungen nicht threadsicher sind. Standardmäßig wird also für jeden Thread, dh für jede Anfrage, eine neue Sitzung (die keine zuvor geladenen Gewichte, Modelle usw. enthält) erstellt. Indem Sie die globale Sitzung, die alle Ihre Modelle enthält, speichern und sie so einstellen, dass sie von Keras in jedem Thread verwendet wird, wird das Problem gelöst.

Vielen Dank dafür.

In meinem Fall habe ich es etwas anders gemacht, falls es jemandem hilft:

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

Die Neuheit hier ist, dass mehrere Modelle (einmal) geladen und in mehreren Threads verwendet werden können.
Standardmäßig werden beim Laden eines Modells der "Standard" Session und der "Standard" Graph verwendet.
Aber hier erschaffst du neue.
Beachten Sie auch, dass Graph im Session Objekt gespeichert wird, was etwas bequemer ist.

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Du bist unglaublich!!!!! Dies ist die beste Lösung. Können Sie mir sagen, warum es nach dem Hinzufügen der Sitzung funktioniert hat?

Vielen Dank und Sie sind herzlich willkommen :).
Soweit ich weiß, besteht das Problem darin, dass Tensorflow-Graphen und -Sitzungen nicht threadsicher sind. Standardmäßig wird also für jeden Thread, dh für jede Anfrage, eine neue Sitzung (die keine zuvor geladenen Gewichte, Modelle usw. enthält) erstellt. Indem Sie die globale Sitzung, die alle Ihre Modelle enthält, speichern und sie so einstellen, dass sie von Keras in jedem Thread verwendet wird, wird das Problem gelöst.

Vielen Dank dafür.

In meinem Fall habe ich es etwas anders gemacht, falls es jemandem hilft:

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

Die Neuheit hier ist, dass mehrere Modelle (einmal) geladen und in mehreren Threads verwendet werden können.
Standardmäßig werden beim Laden eines Modells der "Standard" Session und der "Standard" Graph verwendet.
Aber hier erschaffst du neue.
Beachten Sie auch, dass Graph im Session Objekt gespeichert wird, was etwas bequemer ist.

Danke für diese Antwort
Ich stehe auch vor diesem Problem bei der Verwendung von Flask und Multithreading,

Danke :smiley:

System Information

  • Habe ich benutzerdefinierten Code geschrieben (anstatt ein in TensorFlow bereitgestelltes Standard-Beispielskript zu verwenden): Ja, hier gefunden (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • Betriebssystemplattform und -verteilung (z. B. Linux Ubuntu 16.04): MAC OSX 10.14.4
  • TensorFlow-Version (verwenden Sie den Befehl unten): 2.0.0-alpha0
  • Python-Version: Python 3.6.5

Sie können einige dieser Informationen mithilfe unserer Umgebungserfassung erfassen
python -c "tensorflow als tf importieren; print(tf.version.GIT_VERSION, tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

Beschreiben Sie das aktuelle Verhalten
Wenn Sie "flaskApp.py" ausführen, schlägt es nach dem Laden des Modells und dem Versuch, ein Bild mit "predict" zu klassifizieren, mit dem Fehler fehl:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Fehler beim Lesen der Ressourcenvariablen softmax/kernel aus Container: localhost. Dies könnte bedeuten, dass die Variable nicht initialisiert wurde. Nicht gefunden: Ressource localhost/softmax/kernel/N10tensorflow3VarE existiert nicht.

Beschreiben Sie das erwartete Verhalten
ein Ergebnis der Bildklassifizierung sollte zurückgegeben werden.

Code zum Reproduzieren des Problems
Schritte zum Reproduzieren:

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (falls erforderlich) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • starte die App mit flask run
  • Senden Sie mit Postman oder curl ein beliebiges Bild eines Hundes oder einer Katze an die App
    Screenshot 2019-04-30 at 16 10 57
    ODER
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

Sonstige Infos / Protokolle

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

ich stehe auch vor diesem Problem
tensorflow.python.framework.errors_impl.FailedPreconditionError: Fehler beim Lesen der Ressourcenvariablen dense_6/kernel aus Container: localhost. Dies könnte bedeuten, dass die Variable nicht initialisiert wurde. Nicht gefunden: Ressource localhost/dense_6/kernel/class tensorflow::Var existiert nicht.
[[{{node dense_6/MatMul/ReadVariableOp}}]]

Entschuldigung, ich stehe auch vor diesem Problem. Aber Ihre Antwort behebt mein Problem nicht, vielleicht ist es in einem anderen Zustand. In meinem Problem ist es, wenn ich VGG16 in Keras verwende und die Iterationsfunktion verwenden möchte
loss_value, grads_value = iterate([np.zeros((1, 150, 150, 3))])
Aber diese ähnliche Frage trat auf.
FailedPreconditionError: Fehler beim Lesen der Ressourcenvariablen block1_conv1_12/bias aus Container: localhost. Nicht gefunden: Ressource localhost/block1_conv1_12/bias/N10tensorflow3VarE existiert nicht.[[{{Knotenblock1_conv1_12/BiasAdd/ReadVariableOp}}]]
In https://github.com/JarvisUSTC/deep-learning-with-python-notebooks/blob/master/5.4-visualizing-what-convnets-learn.ipynb trat das Problem nicht auf.
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

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Du bist unglaublich!!!!! Dies ist die beste Lösung. Können Sie mir sagen, warum es nach dem Hinzufügen der Sitzung funktioniert hat?

Vielen Dank und Sie sind herzlich willkommen :).
Soweit ich weiß, besteht das Problem darin, dass Tensorflow-Graphen und -Sitzungen nicht threadsicher sind. Standardmäßig wird also für jeden Thread, dh für jede Anfrage, eine neue Sitzung (die keine zuvor geladenen Gewichte, Modelle usw. enthält) erstellt. Indem Sie die globale Sitzung, die alle Ihre Modelle enthält, speichern und sie so einstellen, dass sie von Keras in jedem Thread verwendet wird, wird das Problem gelöst.

Ich habe das gleiche Problem mit Tensor Flow Version 1.13.1, die obige Lösung funktioniert für mich.

Diese Lösung hat auch bei mir funktioniert.. Danke @eliadl

In TF 2.x gibt es keine session(). wie behebe ich es? Das gleiche Problem tritt in meinem TF 2.x-Code auf.

@SungmanHong anstelle von tf.Session versuchen Sie, tf.compat.v1.Session .

In TF 2.x gibt es keine session(). wie behebe ich es? Das gleiche Problem tritt in meinem TF 2.x-Code auf.

Sitzung in TF 2.X importieren
tf.compat.v1.Session()
keras.backend.get_session in TF 2.X importieren
tf.compat.v1.keras.backend.get_session()

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Das hat bei mir funktioniert, danke

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Mann, du bist genial und genial, du hast gerade mein Projekt gerettet, vielen Dank

In TF 2.x gibt es keine session(). wie behebe ich es? Das gleiche Problem tritt in meinem TF 2.x-Code auf.

Sitzung in TF 2.X importieren
tf.compat.v1.Session()
keras.backend.get_session in TF 2.X importieren
tf.compat.v1.keras.backend.get_session()

Ich habe die angegebene Lösung verwendet, funktioniert aber immer noch nicht, ich bekomme den Fehler

`` 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=Wahr and multiple workers may duplicate your data. Please consider using the keras.utils.Sequence-Klasse.
UserWarning('Verwendung eines Generators mit use_multiprocessing=True '

Epoche 1/4

FailedPreconditionError Traceback (letzter Aufruf zuletzt)
in()
4 learning_rate=config.LEARNING_RATE,
5 Epochen=4,
----> 6 Schichten = 'Köpfe')

6 Rahmen
/usr/local/lib/python3.6/dist-packages/mrcnn/model.py in train(self, train_dataset, val_dataset, learning_rate, epochs, layer, augmentation)
2350 max_queue_size=100,
2351 Arbeiter = Arbeiter,
-> 2352 use_multiprocessing=Wahr,
2353 )
2354 self.epoch = max(self.epoch, epochs)

/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py im Wrapper( args, * kwargs)
89 warnings.warn('Aktualisieren Sie Ihren ' + object_name + ' Aufruf auf das ' +
90 'Keras 2 API: ' + Signatur, Stacklevel=2)
---> 91 return func( args, * kwargs)
92 wrapper._original_function = func
93 Rückverpackung

/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,worker, use_multiprocessing , mischen, initial_epoch)
1730 use_multiprocessing=use_multiprocessing,
1731 mischen = mischen,
-> 1732 initial_epoch=initial_epoch)
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,worker,use_multiprocessing , mischen, initial_epoch)
218 sample_weight=sample_weight,
219 class_weight=class_weight,
--> 220 reset_metrics=False)
221
222 Ausgänge = to_list(Ausgänge)

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

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/backend.py in __call__(self, input)
3630
3631 geholt = 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 in __call__(self, args, * kwargs)
1470 ret = tf_session.TF_SessionRunCallable(self._session._session,
1471 self._handle, args,
-> 1472 run_metadata_ptr)
1473 wenn run_metadata:
1474 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

FailedPreconditionError: Fehler beim Lesen von Ressourcenvariablenankern/Variable aus Container: localhost. Dies könnte bedeuten, dass die Variable nicht initialisiert wurde. Nicht gefunden: Ressource localhost/anchors/Variable/N10tensorflow3VarE existiert nicht.
[[{{Knoten-ROI/ReadVariableOp}}]] ```

BITTE HELFEN!!!

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Du bist unglaublich!!!!! Dies ist die beste Lösung. Können Sie mir sagen, warum es nach dem Hinzufügen der Sitzung funktioniert hat?

Vielen Dank und Sie sind herzlich willkommen :).

Soweit ich weiß, besteht das Problem darin, dass Tensorflow-Graphen und -Sitzungen nicht threadsicher sind. Standardmäßig wird also für jeden Thread, dh für jede Anfrage, eine neue Sitzung (die keine zuvor geladenen Gewichte, Modelle usw. enthält) erstellt. Indem Sie die globale Sitzung, die alle Ihre Modelle enthält, speichern und sie so einstellen, dass sie von Keras in jedem Thread verwendet wird, wird das Problem gelöst.

Pls es zeigt some_custom_config nicht definiert

Pls es zeigt some_custom_config nicht definiert

Ich hatte das gleiche Problem in tensorflow 1.13.1, das ich gelöst habe, indem ich einen Verweis auf die Sitzung erstellt habe, die zum Laden der Modelle verwendet wird, und diese dann so eingestellt habe, dass sie von Keras in jeder Anfrage verwendet wird. Dh ich habe folgendes gemacht:

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

und dann in jeder Anfrage (also in jedem Thread):

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

Arbeit ist für mich, danke!!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen