Tensorflow: Em Runtime: "Erro ao ler a variável de recurso softmax / kernel do Container: localhost"

Criado em 30 abr. 2019  ·  26Comentários  ·  Fonte: tensorflow/tensorflow

Informação do sistema

  • Escrevi um código personalizado (em vez de usar um script de exemplo de estoque fornecido no TensorFlow): sim, encontrado aqui (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • Plataforma e distribuição do sistema operacional (por exemplo, Linux Ubuntu 16.04): MAC OSX 10.14.4
  • Versão do TensorFlow (use o comando abaixo): 2.0.0-alpha0
  • Versão Python: Python 3.6.5

Você pode coletar algumas dessas informações usando nossa captura de ambiente
python -c "importar tensorflow como tf; imprimir (tf.version.GIT_VERSION, tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

Descreva o comportamento atual
ao executar "flaskApp.py", após carregar o modelo e tentar classificar uma imagem usando "predizer", falha com o erro:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Erro ao ler a variável de recurso softmax / kernel do Container: localhost. Isso pode significar que a variável não foi inicializada. Não encontrado: o recurso localhost / softmax / kernel / N10tensorflow3VarE não existe.

Descreva o comportamento esperado
um resultado da classificação da imagem deve ser retornado.

Código para reproduzir o problema
Passos para reproduzir:

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (se necessário) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • inicie o aplicativo com flask run
  • usando Postman ou curl, envie qualquer imagem de um cachorro ou gato para o aplicativo
    Screenshot 2019-04-30 at 16 10 57
    OU
curl -X POST \
  http://localhost:5000/net/MobileNet \
  -H 'Postman-Token: ea35b79b-b34d-4be1-a80c-505c104050ec' \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -F image=@/Users/haitham.b/Projects/ResearchProjects/CNNs/deeplearning-showcase/data/sample/valid/dogs/dog.1008.jpg

Outras informações / logs

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

Comentários muito úteis

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

Todos 26 comentários

Alguma atualização sobre isso?

Este não é um problema de construção / instalação ou bug / desempenho. Poste este tipo de perguntas de suporte no Stackoverflow . Há uma grande comunidade para apoiar e aprender com suas perguntas. O GitHub serve principalmente para solucionar bugs na instalação e no desempenho. Obrigado!

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

Você é incrível!!!!! essa é a melhor solução. Você pode me dizer por que funcionou apenas após adicionar a sessão?

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

Você é incrível!!!!! essa é a melhor solução. Você pode me dizer por que funcionou apenas após adicionar a sessão?

Obrigado e você é muito bem vindo :).

Pelo que entendi, o problema é que os gráficos e sessões de tensorflow não são seguros para threads. Portanto, por padrão, uma nova sessão (que não contém quaisquer pesos carregados anteriormente, modelos também) é criada para cada thread, ou seja, para cada solicitação. Ao salvar a sessão global que contém todos os seus modelos e configurá-la para ser usada por keras em cada thread, o problema é resolvido.

Fechando porque entendi que foi resolvido, mas por favor me avise se eu estiver enganado. Obrigado!

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

Você é incrível!!!!! essa é a melhor solução. Você pode me dizer por que funcionou apenas após adicionar a sessão?

Obrigado e você é muito bem vindo :).

Pelo que entendi, o problema é que os gráficos e sessões de tensorflow não são seguros para threads. Portanto, por padrão, uma nova sessão (que não contém quaisquer pesos carregados anteriormente, modelos também) é criada para cada thread, ou seja, para cada solicitação. Ao salvar a sessão global que contém todos os seus modelos e configurá-la para ser usada por keras em cada thread, o problema é resolvido.

Tenho o mesmo problema com o tensor flow versão 1.13.1, a solução acima funciona para mim.

Estou tendo os mesmos problemas e queria saber qual era o valor de some_custom_config?

Estou tendo os mesmos problemas e queria saber qual era o valor de some_custom_config?

Caso queira configurar sua sessão (o que eu tive que fazer), pode passar a configuração neste parâmetro. Caso contrário, apenas deixe de fora.

Estou tendo os mesmos problemas e queria saber qual era o valor de some_custom_config?

Caso queira configurar sua sessão (o que eu tive que fazer), pode passar a configuração neste parâmetro. Caso contrário, apenas deixe de fora.

Muito obrigado! Tudo está funcionando perfeitamente agora.

Obrigado por fornecer os códigos. Encontrei uma mensagem de erro semelhante ao executar o BERT no Kera. Tentei sua solução, mas não consigo fazê-la funcionar. Qualquer orientação é muito apreciada!

`` `FailedPreconditionError Traceback (última chamada mais recente)
no()
11 validation_data = ([test_input_ids, test_input_masks, test_segment_ids], test_labels),
12 épocas = 1,
---> 13 batch_size = 32
14)

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

FailedPreconditionError: Erro ao ler a variável de recurso bert_layer_9_module / bert / encoder / layer_3 / output / LayerNorm / gamma do Container: localhost. Isso pode significar que a variável não foi inicializada. Não encontrado: o recurso localhost / bert_layer_9_module / bert / encoder / layer_3 / output / LayerNorm / gamma / N10tensorflow3VarE não existe.
[[{{node bert_layer_9 / bert_layer_9_module_apply_tokens / bert / encoder / layer_3 / output / LayerNorm / batchnorm / mul / ReadVariableOp}}]] `` `

Eu tenho um erro semelhante ao usar embeddings Elmo do tf-hub dentro de uma camada keras personalizada.

tensorflow.python.framework.errors_impl.FailedPreconditionError: 2 erros de raiz encontrados.
(0) Pré-condição com falha: Erro ao ler a variável de recurso ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry do Container: localhost. Isso pode significar que a variável não foi inicializada. Não encontrado: Recurso localhost / ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry / class tensorflow :: Var não existe.
[[{{node ElmoEmbeddingLayer / ElmoEmbeddingLayer_module_apply_default / bilm / add / ReadVariableOp}}]]
(1) Pré-condição com falha: Erro ao ler a variável de recurso ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry do Container: localhost. Isso pode significar que a variável não foi inicializada. Não encontrado: Recurso localhost / ElmoEmbeddingLayer_module / bilm / CNN_high_0 / b_carry / class tensorflow :: Var não existe.
[[{{node ElmoEmbeddingLayer / ElmoEmbeddingLayer_module_apply_default / bilm / add / ReadVariableOp}}]]
[[metrics / acc / Identity / _199]]
0 operações bem-sucedidas.
0 erros derivados ignorados.

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

Você é incrível!!!!! essa é a melhor solução. Você pode me dizer por que funcionou apenas após adicionar a sessão?

Obrigado e você é muito bem vindo :).

Pelo que entendi, o problema é que os gráficos e sessões de tensorflow não são seguros para threads. Portanto, por padrão, uma nova sessão (que não contém quaisquer pesos carregados anteriormente, modelos também) é criada para cada thread, ou seja, para cada solicitação. Ao salvar a sessão global que contém todos os seus modelos e configurá-la para ser usada por keras em cada thread, o problema é resolvido.

Muito obrigado por isso.

No meu caso fiz um pouco diferente, caso ajude alguém:

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

A novidade aqui é permitir que vários modelos sejam carregados (uma vez) e usados ​​em vários threads.
Por padrão, o "padrão" Session e o "padrão" Graph são usados ​​ao carregar um modelo.
Mas aqui você cria novos.
Observe também que Graph está armazenado no objeto Session , que é um pouco mais conveniente.

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

Você é incrível!!!!! essa é a melhor solução. Você pode me dizer por que funcionou apenas após adicionar a sessão?

Obrigado e você é muito bem vindo :).
Pelo que entendi, o problema é que os gráficos e sessões de tensorflow não são seguros para threads. Portanto, por padrão, uma nova sessão (que não contém quaisquer pesos carregados anteriormente, modelos também) é criada para cada thread, ou seja, para cada solicitação. Ao salvar a sessão global que contém todos os seus modelos e configurá-la para ser usada por keras em cada thread, o problema é resolvido.

Muito obrigado por isso.

No meu caso fiz um pouco diferente, caso ajude alguém:

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

A novidade aqui é permitir que vários modelos sejam carregados (uma vez) e usados ​​em vários threads.
Por padrão, o "padrão" Session e o "padrão" Graph são usados ​​ao carregar um modelo.
Mas aqui você cria novos.
Observe também que Graph está armazenado no objeto Session , que é um pouco mais conveniente.

Obrigado por esta resposta
Também estou enfrentando esse problema ao usar flask e multithreading, @eliadl Sua solução funcionou para mim.

Obrigado: smiley:

Informação do sistema

  • Escrevi um código personalizado (em vez de usar um script de exemplo de estoque fornecido no TensorFlow): sim, encontrado aqui (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • Plataforma e distribuição do sistema operacional (por exemplo, Linux Ubuntu 16.04): MAC OSX 10.14.4
  • Versão do TensorFlow (use o comando abaixo): 2.0.0-alpha0
  • Versão Python: Python 3.6.5

Você pode coletar algumas dessas informações usando nossa captura de ambiente
python -c "importar tensorflow como tf; imprimir (tf.version.GIT_VERSION, tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

Descreva o comportamento atual
ao executar "flaskApp.py", após carregar o modelo e tentar classificar uma imagem usando "predizer", falha com o erro:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Erro ao ler a variável de recurso softmax / kernel do Container: localhost. Isso pode significar que a variável não foi inicializada. Não encontrado: o recurso localhost / softmax / kernel / N10tensorflow3VarE não existe.

Descreva o comportamento esperado
um resultado da classificação da imagem deve ser retornado.

Código para reproduzir o problema
Passos para reproduzir:

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (se necessário) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • inicie o aplicativo com flask run
  • usando Postman ou curl, envie qualquer imagem de um cachorro ou gato para o aplicativo
    Screenshot 2019-04-30 at 16 10 57
    OU
curl -X POST \
  http://localhost:5000/net/MobileNet \
  -H 'Postman-Token: ea35b79b-b34d-4be1-a80c-505c104050ec' \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -F image=@/Users/haitham.b/Projects/ResearchProjects/CNNs/deeplearning-showcase/data/sample/valid/dogs/dog.1008.jpg

Outras informações / logs

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

Eu também estou enfrentando esse problema
tensorflow.python.framework.errors_impl.FailedPreconditionError: Erro ao ler a variável de recurso dense_6 / kernel do Container: localhost. Isso pode significar que a variável não foi inicializada. Não encontrado: o recurso localhost / dense_6 / kernel / class tensorflow :: Var não existe.
[[{{node dense_6 / MatMul / ReadVariableOp}}]]

desculpe, também estou enfrentando esse problema. Mas sua resposta não resolve meu problema, talvez ele esteja em condições diferentes. No meu problema, é quando eu uso VGG16 em keras e quero usar a função de iteração
loss_value, grads_value = iterate([np.zeros((1, 150, 150, 3))])
Mas esta questão semelhante ocorreu.
FailedPreconditionError: Erro ao ler a variável de recurso block1_conv1_12 / bias do Container: localhost. Não encontrado: o recurso localhost / block1_conv1_12 / bias / N10tensorflow3VarE não existe.[[{{node block1_conv1_12 / BiasAdd / ReadVariableOp}}]]
Em https://github.com/JarvisUSTC/deep-learning-with-python-notebooks/blob/master/5.4-visualizing-what-convnets-learn.ipynb , o problema não foi encontrado.
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

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

Você é incrível!!!!! essa é a melhor solução. Você pode me dizer por que funcionou apenas após adicionar a sessão?

Obrigado e você é muito bem vindo :).
Pelo que entendi, o problema é que os gráficos e sessões de tensorflow não são seguros para threads. Portanto, por padrão, uma nova sessão (que não contém quaisquer pesos carregados anteriormente, modelos também) é criada para cada thread, ou seja, para cada solicitação. Ao salvar a sessão global que contém todos os seus modelos e configurá-la para ser usada por keras em cada thread, o problema é resolvido.

Tenho o mesmo problema com o tensor flow versão 1.13.1, a solução acima funciona para mim.

Essa solução funcionou para mim também .. Obrigado @eliadl

No TF 2.x, não há sessão (). como faço para corrigir isso? mesmo problema está acontecendo no meu código TF 2.x.

@SungmanHong em vez de tf.Session tente usar tf.compat.v1.Session .

No TF 2.x, não há sessão (). como faço para corrigir isso? mesmo problema está acontecendo no meu código TF 2.x.

importar sessão em TF 2.X
tf.compat.v1.Session()
import keras.backend.get_session no TF 2.X
tf.compat.v1.keras.backend.get_session()

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

Isso funcionou para mim, obrigado

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

Cara, você é um gênio e incrível, acabou de salvar meu projeto, muito obrigado

No TF 2.x, não há sessão (). como faço para corrigir isso? mesmo problema está acontecendo no meu código TF 2.x.

importar sessão em TF 2.X
tf.compat.v1.Session()
import keras.backend.get_session no TF 2.X
tf.compat.v1.keras.backend.get_session()

Usei a solução fornecida, mas ainda não funcionou para mim, estou recebendo o erro

`` 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 class.
UserWarning ('Usando um gerador com use_multiprocessing=True '

Época 1/4

FailedPreconditionError Traceback (última chamada mais recente)
no()
4 learning_rate = config.LEARNING_RATE,
5 épocas = 4,
----> 6 camadas = 'cabeças')

6 frames
/usr/local/lib/python3.6/dist-packages/mrcnn/model.py in train (self, train_dataset, val_dataset, learning_rate, épocas, camadas, aumento)
2350 max_queue_size = 100,
2351 trabalhadores = trabalhadores,
-> 2352 use_multiprocessing = True,
2353)
2354 self.epoch = max (self.epoch, epochs)

/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py no wrapper ( args, * kwargs)
89 warnings.warn ('Atualize sua chamada ' + object_name + ' para o' +
90 'Keras 2 API:' + assinatura, stacklevel = 2)
---> 91 função de retorno ( args, * kwargs)
92 wrapper._original_function = func
93 embalagem de retorno

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

/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py em fit_generator (modelo, gerador, etapas_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, validation_freq, class_weight, max_processing_epoch use, workers, , shuffle, initial_epoch)
218 sample_weight = sample_weight,
219 class_weight = class_weight,
-> 220 reset_metrics = False)
221
222 outs = to_list (outs)

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

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/backend.py em __call __ (self, inputs)
3630
3631 obtido = self._callable_fn (* array_vals,
-> 3632 run_metadata = self.run_metadata)
3633 self._call_fetch_callbacks (buscado [-len (self._fetches):])
3634 output_structure = nest.pack_sequence_as (

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

FailedPreconditionError: Erro ao ler âncoras de variáveis ​​de recurso / Variável do contêiner: localhost. Isso pode significar que a variável não foi inicializada. Não encontrado: o recurso localhost / anchors / Variable / N10tensorflow3VarE não existe.
[[{{node ROI / ReadVariableOp}}]] `` `

POR FAVOR AJUDE!!!

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

Você é incrível!!!!! essa é a melhor solução. Você pode me dizer por que funcionou apenas após adicionar a sessão?

Obrigado e você é muito bem vindo :).

Pelo que entendi, o problema é que os gráficos e sessões de tensorflow não são seguros para threads. Portanto, por padrão, uma nova sessão (que não contém quaisquer pesos carregados anteriormente, modelos também) é criada para cada thread, ou seja, para cada solicitação. Ao salvar a sessão global que contém todos os seus modelos e configurá-la para ser usada por keras em cada thread, o problema é resolvido.

Por favor, está mostrando some_custom_config não definido

Por favor, está mostrando some_custom_config não definido

Tive o mesmo problema no tensorflow 1.13.1 que resolvi criando uma referência para a sessão que é usada para carregar os modelos e, em seguida, defini-la para ser usada por keras em cada solicitação. Ou seja, fiz o seguinte:

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

e, em seguida, em cada solicitação (ou seja, em cada thread):

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

trabalho é para mim, obrigado !!

Esta página foi útil?
0 / 5 - 0 avaliações