Tensorflow: Во время выполнения: «Ошибка при чтении переменной ресурса softmax / kernel из контейнера: localhost»

Созданный на 30 апр. 2019  ·  26Комментарии  ·  Источник: tensorflow/tensorflow

Системная информация

  • Написал ли я собственный код (в отличие от использования стандартного примера сценария, представленного в TensorFlow): да, нашел здесь (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • Платформа ОС и распространение (например, Linux Ubuntu 16.04): MAC OSX 10.14.4
  • Версия TensorFlow (используйте команду ниже): 2.0.0-alpha0
  • Версия Python: Python 3.6.5

Вы можете собрать часть этой информации с помощью нашей программы отслеживания среды.
python -c "импортировать тензорный поток как tf; print (tf.version.GIT_VERSION, tf.version.VERSION)"
Версия 1.12.0-9492-g2c319fb415 2.0.0-alpha0

Опишите текущее поведение
при запуске «flaskApp.py» после загрузки модели и попытки классифицировать изображение с помощью «предсказать» происходит сбой с ошибкой:

tensorflow.python.framework.errors_impl.FailedPreconditionError: ошибка при чтении переменной ресурса softmax / kernel из контейнера: localhost. Это могло означать, что переменная не инициализирована. Не найдено: ресурс 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?

Если вы хотите настроить сеанс (что мне пришлось сделать), вы можете передать конфигурацию в этом параметре. В противном случае просто оставьте это.

Большое спасибо! Теперь все работает отлично.

Спасибо за предоставленные коды. Я столкнулся с аналогичным сообщением об ошибке при запуске BERT на Kera. Я пробовал ваше решение, но не могу заставить его работать. Любое руководство приветствуется!

`` FailedPreconditionError Traceback (последний вызов последним)
в()
11 validation_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 в __call __ (self, args, * kwargs)
1456 ret = tf_session.TF_SessionRunCallable (self._session._session,
1457 self._handle, аргументы,
-> 1458 run_metadata_ptr)
1459, если run_metadata:
1460 proto_data = tf_session.TF_GetBuffer (run_metadata_ptr)

FailedPreconditionError: ошибка при чтении переменной ресурса bert_layer_9_module / bert / encoder / layer_3 / output / LayerNorm / gamma из контейнера: localhost. Это могло означать, что переменная не инициализирована. Не найдено: ресурс localhost / bert_layer_9_module / bert / encoder / layer_3 / output / LayerNorm / gamma / N10tensorflow3VarE не существует.
[[{{узел bert_layer_9 / bert_layer_9_module_apply_tokens / bert / encoder / layer_3 / output / LayerNorm / batchnorm / mul / ReadVariableOp}}]] ``

У меня аналогичная ошибка при использовании вложений Elmo из tf-hub внутри настраиваемого слоя keras.

tensorflow.python.framework.errors_impl.FailedPreconditionError: обнаружены 2 корневые ошибки.
(0) Неудачное предварительное условие: ошибка при чтении ресурсной переменной ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry из контейнера: localhost. Это могло означать, что переменная не инициализирована. Не найдено: ресурс localhost / ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry / class tensorflow :: Var не существует.
[[{{узел ElmoEmbeddingLayer / ElmoEmbeddingLayer_module_apply_default / bilm / add / ReadVariableOp}}]]
(1) Неудачное предварительное условие: ошибка при чтении ресурсной переменной ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry из контейнера: localhost. Это могло означать, что переменная не инициализирована. Не найдено: ресурс localhost / ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry / class tensorflow :: Var не существует.
[[{{узел ElmoEmbeddingLayer / ElmoEmbeddingLayer_module_apply_default / bilm / 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)

Новинка здесь позволяет загружать несколько моделей (один раз) и использовать их в нескольких потоках.
По умолчанию при загрузке модели используются «default» Session и «default» Graph .
Но здесь вы создаете новые.
Также обратите внимание, что Graph хранится в объекте 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(...)

Ты великолепен!!!!! Это лучшее решение. Можете ли вы сказать мне, почему это сработало после добавления сеанса?

Спасибо и добро пожаловать :).
Насколько я понимаю, проблема в том, что графы и сеансы тензорного потока не являются потокобезопасными. Таким образом, по умолчанию новый сеанс (который не содержит никаких ранее загруженных весов, моделей 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)

Новинка здесь позволяет загружать несколько моделей (один раз) и использовать их в нескольких потоках.
По умолчанию при загрузке модели используются «default» Session и «default» Graph .
Но здесь вы создаете новые.
Также обратите внимание, что Graph хранится в объекте Session , что немного удобнее.

Спасибо за этот ответ
Я также сталкиваюсь с этой проблемой при использовании колбы и многопоточности, @eliadl Ваше решение сработало для меня.

Спасибо: smiley:

Системная информация

  • Написал ли я собственный код (в отличие от использования стандартного примера сценария, представленного в TensorFlow): да, нашел здесь (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • Платформа ОС и распространение (например, Linux Ubuntu 16.04): MAC OSX 10.14.4
  • Версия TensorFlow (используйте команду ниже): 2.0.0-alpha0
  • Версия Python: Python 3.6.5

Вы можете собрать часть этой информации с помощью нашей программы отслеживания среды.
python -c "импортировать тензорный поток как tf; print (tf.version.GIT_VERSION, tf.version.VERSION)"
Версия 1.12.0-9492-g2c319fb415 2.0.0-alpha0

Опишите текущее поведение
при запуске «flaskApp.py» после загрузки модели и попытки классифицировать изображение с помощью «предсказать» происходит сбой с ошибкой:

tensorflow.python.framework.errors_impl.FailedPreconditionError: ошибка при чтении переменной ресурса softmax / kernel из контейнера: localhost. Это могло означать, что переменная не инициализирована. Не найдено: ресурс 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: ошибка при чтении переменной ресурса density_6 / kernel из контейнера: localhost. Это могло означать, что переменная не инициализирована. Не найдено: ресурс localhost / density_6 / kernel / class tensorflow :: Var не существует.
[[{{узел_6 / MatMul / ReadVariableOp}}]]

извините, я тоже столкнулся с этой проблемой. Но ваш ответ не решает мою проблему, возможно, она в другом состоянии. В моей проблеме это когда я использую VGG16 в keras, и я хочу использовать функцию итерации
loss_value, grads_value = iterate([np.zeros((1, 150, 150, 3))])
Но возник аналогичный вопрос.
FailedPreconditionError: ошибка при чтении переменной ресурса block1_conv1_12 / bias из контейнера: localhost. Не найдено: ресурс localhost / block1_conv1_12 / bias / N10tensorflow3VarE не существует.[[{{узел block1_conv1_12 / BiasAdd / ReadVariableOp}}]]
В https://github.com/JarvisUSTC/deep-learning-with-python-notebooks/blob/master/5.4-visualizing-what-convnets-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 (). как мне это исправить? такая же проблема возникает в моем коде TF 2.x.

@SungmanHong вместо tf.Session попробуйте использовать tf.compat.v1.Session .

В TF 2.x нет session (). как мне это исправить? такая же проблема возникает в моем коде TF 2.x.

импортная сессия в TF 2.X
tf.compat.v1.Session()
импортировать keras.backend.get_session в TF 2.X
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 (). как мне это исправить? такая же проблема возникает в моем коде TF 2.x.

импортная сессия в TF 2.X
tf.compat.v1.Session()
импортировать keras.backend.get_session в TF 2.X
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 Traceback (последний вызов последним)
в()
4 learning_rate = config.LEARNING_RATE,
5 эпох = 4,
----> 6 слоев = 'головы')

6 кадров
/usr/local/lib/python3.6/dist-packages/mrcnn/model.py в поезде (self, train_dataset, val_dataset, learning_rate, эпохи, слои, увеличение)
2350 max_queue_size = 100,
2351 рабочих = рабочих,
-> 2352 use_multiprocessing = True,
2353)
2354 я.эпоха = макс (я.эпоха, эпохи)

/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py в оболочке ( args, * kwargs)
89 warnings.warn ('Обновите вызов ' + object_name + ' до' +
90 'Keras 2 API:' + подпись, уровень стека = 2)
---> 91 return func ( args, * kwargs)
92 обертка._original_function = func
93 возвратная обертка

/usr/local/lib/python3.6/dist-packages/keras/engine/training.py в fit_generator (self, generator, steps_per_epoch, epochs, verbose, обратные вызовы, validation_data, validation_steps, validation_freq, class_weight, max_queue_size, work , перемешать, initial_epoch)
1730 use_multiprocessing = use_multiprocessing,
1731 перемешать = перемешать,
-> 1732 начальная_ эпоха = начальная_ эпоха)
1733
1734 @ interfaces.legacy_generator_methods_support

/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py в fit_generator (модель, генератор, steps_per_epoch, epochs, verbose, обратные вызовы, validation_data, validation_steps, validation_freq, class_weight, max_processing_specing, use , перемешать, initial_epoch)
218 sample_weight = sample_weight,
219 вес_класса = вес_класса,
-> 220 reset_metrics = Ложь)
221
222 аутов = to_list (аутов)

/usr/local/lib/python3.6/dist-packages/keras/engine/training.py в train_on_batch (self, x, y, sample_weight, class_weight, reset_metrics)
1512 ins = x + y + sample_weights
1513 self._make_train_function ()
-> 1514 выходов = self.train_function (ins)
1515
1516, если reset_metrics:

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/backend.py в __call __ (себя, входы)
3630
3631 получено = self._callable_fn (* массив_валс,
-> 3632 run_metadata = self.run_metadata)
3633 self._call_fetch_callbacks (получено [-len (self._fetches):])
3634 output_structure = nest.pack_sequence_as (

/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py в __call __ (self, args, * kwargs)
1470 ret = tf_session.TF_SessionRunCallable (self._session._session,
1471 self._handle, аргументы,
-> 1472 run_metadata_ptr)
1473, если run_metadata:
1474 proto_data = tf_session.TF_GetBuffer (run_metadata_ptr)

FailedPreconditionError: ошибка при чтении якорей ресурсных переменных / переменной из контейнера: localhost. Это могло означать, что переменная не инициализирована. Не найдено: ресурс localhost / anchors / 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 в каждом потоке, проблема решается.

Пожалуйста, он показывает, что some_custom_config не определен

Пожалуйста, он показывает, что 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 рейтинги