Tensorflow: 実行時:「コンテナからリソース変数softmax / kernelを読み取っているときにエラーが発生しました:localhost」

作成日 2019年04月30日  ·  26コメント  ·  ソース: tensorflow/tensorflow

システムインフォメーション

  • (TensorFlowで提供されているストックサンプルスクリプトを使用するのではなく)カスタムコードを記述しましたか:はい、ここにあります(https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • OSプラットフォームとディストリビューション(例:Linux Ubuntu 16.04):MAC OSX 10.14.4
  • TensorFlowバージョン(以下のコマンドを使用):2.0.0-alpha0
  • Pythonバージョン:Python 3.6.5

環境キャプチャを使用して、この情報の一部を収集できます
python -c "import tensorflow as tf; print(tf.version.GIT_VERSION、tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

現在の行動を説明する
「flaskApp.py」を実行しているときに、モデルをロードし、「predict」を使用して画像を分類しようとすると、次のエラーで失敗します。

tensorflow.python.framework.errors_impl.FailedPreconditionError:コンテナ:localhostからリソース変数softmax / kernelを読み取っているときにエラーが発生しました。 これは、変数が初期化されていないことを意味している可能性があります。 見つかりません:リソースlocalhost / softmax / kernel / N10tensorflow3VarEが存在しません。

予想される動作を説明する
画像分類の結果を返す必要があります。

問題を再現するためのコード
再現する手順:

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (必要な場合) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • flask runアプリを起動します
  • Postmanまたはcurlを使用して、犬または猫の画像をアプリに送信します
    Screenshot 2019-04-30 at 16 10 57
    また
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

その他の情報/ログ

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

最も参考になるコメント

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

全てのコメント26件

これに関する更新はありますか?

これはビルド/インストールまたはバグ/パフォーマンスの問題ではありません。 この種のサポートの質問をStackoverflowに投稿してください。 あなたの質問をサポートし、そこから学ぶための大きなコミュニティがあります。 GitHubは、主にインストールとパフォーマンスのバグに対処するためのものです。 ありがとう!

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

あなたは素晴らしいです!!!!! これが最善の解決策です。 セッションを追加した直後に機能した理由を教えてください。

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

あなたは素晴らしいです!!!!! これが最善の解決策です。 セッションを追加した直後に機能した理由を教えてください。

ありがとう、そしてあなたは大歓迎です:)。

私が理解している限り、問題はテンソルフローグラフとセッションがスレッドセーフではないということです。 そのため、デフォルトでは、新しいセッション(以前にロードされたウェイトを含まない、モデルaso)がスレッドごとに、つまりリクエストごとに作成されます。 すべてのモデルを含むグローバルセッションを保存し、各スレッドでkerasが使用するように設定することで、問題が解決されます。

解決することを理解しているので締めくくりますが、間違えた場合はお知らせください。 ありがとう!

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

あなたは素晴らしいです!!!!! これが最善の解決策です。 セッションを追加した直後に機能した理由を教えてください。

ありがとう、そしてあなたは大歓迎です:)。

私が理解している限り、問題はテンソルフローグラフとセッションがスレッドセーフではないということです。 そのため、デフォルトでは、新しいセッション(以前にロードされたウェイトを含まない、モデルaso)がスレッドごとに、つまりリクエストごとに作成されます。 すべてのモデルを含むグローバルセッションを保存し、各スレッドでkerasが使用するように設定することで、問題が解決されます。

テンソルフローバージョン1.13.1でも同じ問題が発生しますが、上記の解決策で問題は解決します。

私は同じ問題を抱えていて、some_custom_configの値が何であるか疑問に思っていましたか?

私は同じ問題を抱えていて、some_custom_configの値が何であるか疑問に思っていましたか?

セッションを構成したい場合(私がしなければならなかった)、このパラメーターで構成を渡すことができます。 それ以外の場合は、省略してください。

私は同じ問題を抱えていて、some_custom_configの値が何であるか疑問に思っていましたか?

セッションを構成したい場合(私がしなければならなかった)、このパラメーターで構成を渡すことができます。 それ以外の場合は、省略してください。

どうもありがとう! 現在、すべてが完全に実行されています。

コードを提供していただきありがとうございます。 KeraでBERTを実行しているときに、同様のエラーメッセージが表示されました。 私はあなたの解決策を試しましたが、それを機能させることができないようです。 どんなガイダンスも大歓迎です!

`` `FailedPreconditionError Traceback(最後の最後の呼び出し)
()
11validation_data =([test_input_ids、test_input_masks、test_segment_ids]、test_labels)、
12エポック= 1、
---> 13 batch_size = 32
14)

3フレーム
/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、args、
-> 1458 run_metadata_ptr)
run_metadataの場合は1459:
1460 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

FailedPreconditionError:コンテナ:localhostからリソース変数bert_layer_9_module / bert /エンコーダー/ layer_3 / output / LayerNorm / gammaを読み取っているときにエラーが発生しました。 これは、変数が初期化されていないことを意味している可能性があります。 見つかりません:リソースlocalhost / bert_layer_9_module / bert /エンコーダー/ layer_3 / output / LayerNorm / gamma / N10tensorflow3VarEが存在しません。
[[{{node bert_layer_9 / bert_layer_9_module_apply_tokens / bert / encode / layer_3 / output / LayerNorm / batchnorm / mul / ReadVariableOp}}]] `` `

カスタムkerasレイヤー内のtf-hubからElmo埋め込みを使用すると、同様のエラーが発生します。

tensorflow.python.framework.errors_impl.FailedPreconditionError:2つのルートエラーが見つかりました。
(0)失敗した前提条件:コンテナ:localhostからリソース変数ElmoEmbeddingLayer_module / billm / CNN_high_0 / b_carryを読み取っているときにエラーが発生しました。 これは、変数が初期化されていないことを意味している可能性があります。 見つかりません:リソースlocalhost / ElmoEmbeddingLayer_module / billm / CNN_high_0 / b_carry / class tensorflow :: Varが存在しません。
[[{{node ElmoEmbeddingLayer / ElmoEmbeddingLayer_module_apply_default / billm / add / ReadVariableOp}}]]
(1)失敗した前提条件:コンテナ:localhostからリソース変数ElmoEmbeddingLayer_module / billm / CNN_high_0 / b_carryを読み取っているときにエラーが発生しました。 これは、変数が初期化されていないことを意味している可能性があります。 見つかりません:リソースlocalhost / ElmoEmbeddingLayer_module / billm / CNN_high_0 / b_carry / class tensorflow :: Varが存在しません。
[[{{node ElmoEmbeddingLayer / ElmoEmbeddingLayer_module_apply_default / billm / add / ReadVariableOp}}]]
[[metrics / acc / Identity / _199]]
0成功した操作。
0派生エラーは無視されます。

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

あなたは素晴らしいです!!!!! これが最善の解決策です。 セッションを追加した直後に機能した理由を教えてください。

ありがとう、そしてあなたは大歓迎です:)。

私が理解している限り、問題はテンソルフローグラフとセッションがスレッドセーフではないということです。 そのため、デフォルトでは、新しいセッション(以前にロードされたウェイトを含まない、モデルaso)がスレッドごとに、つまりリクエストごとに作成されます。 すべてのモデルを含むグローバルセッションを保存し、各スレッドでkerasが使用するように設定することで、問題が解決されます。

どうもありがとうございました。

私の場合、それが誰かを助ける場合に備えて、私はそれを少し違ったやり方でしました:

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

ここでの目新しさは、複数のモデルを(1回)ロードして複数のスレッドで使用できるようにすることです。
デフォルトでは、「デフォルト」のSessionと「デフォルト」のGraphがモデルのロード中に使用されます。
しかし、ここで新しいものを作成します。
また、 GraphSessionオブジェクトに格納されていることに注意してください。これは、もう少し便利です。

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

あなたは素晴らしいです!!!!! これが最善の解決策です。 セッションを追加した直後に機能した理由を教えてください。

ありがとう、そしてあなたは大歓迎です:)。
私が理解している限り、問題はテンソルフローグラフとセッションがスレッドセーフではないということです。 そのため、デフォルトでは、新しいセッション(以前にロードされたウェイトを含まない、モデルaso)がスレッドごとに、つまりリクエストごとに作成されます。 すべてのモデルを含むグローバルセッションを保存し、各スレッドでkerasが使用するように設定することで、問題が解決されます。

どうもありがとうございました。

私の場合、それが誰かを助ける場合に備えて、私はそれを少し違ったやり方でしました:

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

ここでの目新しさは、複数のモデルを(1回)ロードして複数のスレッドで使用できるようにすることです。
デフォルトでは、「デフォルト」のSessionと「デフォルト」のGraphがモデルのロード中に使用されます。
しかし、ここで新しいものを作成します。
また、 GraphSessionオブジェクトに格納されていることに注意してください。これは、もう少し便利です。

この答えをありがとう
フラスコとマルチスレッドを使用しているときにもこの問題に直面しています。 @ eliadlあなたのソリューションは私のために働きました。

ありがとう:スマイリー:

システムインフォメーション

  • (TensorFlowで提供されているストックサンプルスクリプトを使用するのではなく)カスタムコードを記述しましたか:はい、ここにあります(https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • OSプラットフォームとディストリビューション(例:Linux Ubuntu 16.04):MAC OSX 10.14.4
  • TensorFlowバージョン(以下のコマンドを使用):2.0.0-alpha0
  • Pythonバージョン:Python 3.6.5

環境キャプチャを使用して、この情報の一部を収集できます
python -c "import tensorflow as tf; print(tf.version.GIT_VERSION、tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

現在の行動を説明する
「flaskApp.py」を実行しているときに、モデルをロードし、「predict」を使用して画像を分類しようとすると、次のエラーで失敗します。

tensorflow.python.framework.errors_impl.FailedPreconditionError:コンテナ:localhostからリソース変数softmax / kernelを読み取っているときにエラーが発生しました。 これは、変数が初期化されていないことを意味している可能性があります。 見つかりません:リソースlocalhost / softmax / kernel / N10tensorflow3VarEが存在しません。

予想される動作を説明する
画像分類の結果を返す必要があります。

問題を再現するためのコード
再現する手順:

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (必要な場合) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • flask runアプリを起動します
  • Postmanまたはcurlを使用して、犬または猫の画像をアプリに送信します
    Screenshot 2019-04-30 at 16 10 57
    また
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

その他の情報/ログ

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

私もこの問題に直面しています
tensorflow.python.framework.errors_impl.FailedPreconditionError:コンテナからリソース変数dense_6 / kernelを読み取っているときにエラーが発生しました:localhost。 これは、変数が初期化されていないことを意味している可能性があります。 見つかりません:リソースlocalhost / density_6 / kernel / class tensorflow :: Varが存在しません。
[[{{nodedensity_6 / MatMul / ReadVariableOp}}]]

申し訳ありませんが、私もこの問題に直面しています。 しかし、あなたの答えは私の問題を解決しません。おそらくそれは別の状態にあります。 私の問題では、ケラスでVGG16を使用していて、反復関数を使用したい場合です。
loss_value, grads_value = iterate([np.zeros((1, 150, 150, 3))])
しかし、この同様の質問が発生しました。
FailedPreconditionError:コンテナ:localhostからリソース変数block1_conv1_12 / biasを読み取っているときにエラーが発生しました。 見つかりません:リソースlocalhost / block1_conv1_12 / bias / N10tensorflow3VarEが存在しません。[[{{node block1_conv1_12 / biasAdd / ReadVariableOp}}]]
https://github.com/JarvisUSTC/deep-learning-with-python-notebooks/blob/master/5.4-visualizing-what-c​​onvnets-learn.ipynbでは、問題は発生しませんでした。
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

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

あなたは素晴らしいです!!!!! これが最善の解決策です。 セッションを追加した直後に機能した理由を教えてください。

ありがとう、そしてあなたは大歓迎です:)。
私が理解している限り、問題はテンソルフローグラフとセッションがスレッドセーフではないということです。 そのため、デフォルトでは、新しいセッション(以前にロードされたウェイトを含まない、モデルaso)がスレッドごとに、つまりリクエストごとに作成されます。 すべてのモデルを含むグローバルセッションを保存し、各スレッドでkerasが使用するように設定することで、問題が解決されます。

テンソルフローバージョン1.13.1でも同じ問題が発生しますが、上記の解決策で問題は解決します。

このソリューションは私にも役立ちました..ありがとう@eliadl

TF 2.xには、session()はありません。 どうすれば修正できますか? 同じ問題が私のTF2.xコードでも発生しています。

@SungmanHongの代わりに、 tf.Sessionを使用してみてくださいtf.compat.v1.Session

TF 2.xには、session()はありません。 どうすれば修正できますか? 同じ問題が私のTF2.xコードでも発生しています。

TF2.Xでのインポートセッション
tf.compat.v1.Session()
TF2.Xでkeras.backend.get_sessionをインポートします
tf.compat.v1.keras.backend.get_session()

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

これは私のために働いた、ありがとう

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

あなたは天才で素晴らしい人です、あなたは私のプロジェクトを保存しました、どうもありがとうございました

TF 2.xには、session()はありません。 どうすれば修正できますか? 同じ問題が私のTF2.xコードでも発生しています。

TF2.Xでのインポートセッション
tf.compat.v1.Session()
TF2.Xでkeras.backend.get_sessionをインポートします
tf.compat.v1.keras.backend.get_session()

与えられたソリューションを使用しましたが、まだ機能しませんでした。エラーが発生します

`` 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クラス。
UserWarning( ' use_multiprocessing=Trueジェネレーターを使用する'

エポック1/4

FailedPreconditionErrorトレースバック(最後の最後の呼び出し)
()
4 Learning_rate = config.LEARNING_RATE、
5エポック= 4、
----> 6層= 'ヘッド')

6フレーム
/usr/local/lib/python3.6/dist-packages/mrcnn/model.py in train(self、train_dataset、val_dataset、learning_rate、epochs、layers、augmentation)
2350 max_queue_size = 100、
2351人の労働者=労働者、
-> 2352 use_multiprocessing = True、
2353)
2354 self.epoch = max(self.epoch、epochs)

/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py inwrapper( args、* kwargs)
89 warnings.warn( ' ' + object_name + '呼び出しを' +に更新します
90'Keras 2 API: '+署名、stacklevel = 2)
---> 91 return func( args、* kwargs)
92wrapper._original_function = func
93リターンラッパー

/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 、シャッフル、initial_epoch)
1730 use_multiprocessing = use_multiprocessing、
1731シャッフル=シャッフル、
-> 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、workers、use_multiprocessing 、シャッフル、initial_epoch)
218 sample_weight = sample_weight、
219 class_weight = class_weight、
-> 220 reset_metrics = False)
221
222アウト= to_list(outs)

/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インチ= x + y + sample_weights
1513 self._make_train_function()
-> 1514出力= self.train_function(ins)
1515
reset_metricsの場合は1516:

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/backend.py in __call __(self、inputs)
3630
3631フェッチ済み= 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)
run_metadataの場合は1473:
1474 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

FailedPreconditionError:コンテナからリソース変数anchors / Variableを読み取っているときにエラーが発生しました:localhost。 これは、変数が初期化されていないことを意味している可能性があります。 見つかりません:リソースlocalhost / archives / Variable / N10tensorflow3VarEが存在しません。
[[{{node ROI / ReadVariableOp}}]] `` `

助けてください!!!

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

あなたは素晴らしいです!!!!! これが最善の解決策です。 セッションを追加した直後に機能した理由を教えてください。

ありがとう、そしてあなたは大歓迎です:)。

私が理解している限り、問題はテンソルフローグラフとセッションがスレッドセーフではないということです。 そのため、デフォルトでは、新しいセッション(以前にロードされたウェイトを含まない、モデルaso)がスレッドごとに、つまりリクエストごとに作成されます。 すべてのモデルを含むグローバルセッションを保存し、各スレッドでkerasが使用するように設定することで、問題が解決されます。

plsそれはsome_custom_configが定義されていないことを示しています

plsそれはsome_custom_configが定義されていないことを示しています

tensorflow 1.13.1でも同じ問題が発生しました。これは、モデルの読み込みに使用されるセッションへの参照を作成し、各リクエストでkerasが使用するように設定することで解決しました。 つまり、私は次のことをしました:

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

次に、各リクエスト(つまり、各スレッド)で:

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

仕事は私のためです、ありがとう!

このページは役に立ちましたか?
0 / 5 - 0 評価