Tensorflow: 在运行时:“从容器读取资源变量 softmax/内核时出错:localhost”

创建于 2019-04-30  ·  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“将tensorflow导入为tf;打印(tf.version.GIT_VERSION,tf.version.VERSION)”
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

描述当前的行为
运行“flaskApp.py”时,加载模型并尝试使用“预测”对图像进行分类后,失败并显示错误:

tensorflow.python.framework.errors_impl.FailedPreconditionError:从容器读取资源变量softmax/内核时出错:本地主机。 这可能意味着该变量未初始化。 未找到:资源 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 批量大小=32
14)

3帧
/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py 在 __call__(self, args, * kwargs)
第1456章
第1457章
-> 1458 run_metadata_ptr)
第 1459 章
第1460章

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

在自定义 keras 层内使用来自 tf-hub 的 Elmo 嵌入时,我遇到了类似的错误。

tensorflow.python.framework.errors_impl.FailedPreconditionError:发现 2 个根错误。
(0) 失败的前提条件:从 Container: localhost 读取资源变量 ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry 时出错。 这可能意味着该变量未初始化。 未找到:资源 localhost/ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry/class tensorflow::Var 不存在。
[[{{节点 ElmoEmbeddingLayer/ElmoEmbeddingLayer_module_apply_default/bilm/add/ReadVariableOp}}]]
(1) 失败的前提条件:从 Container: localhost 读取资源变量 ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry 时出错。 这可能意味着该变量未初始化。 未找到:资源 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)

这里的新颖之处在于允许加载多个模型(一次)并在多个线程中使用。
默认情况下,加载模型时使用“默认” Session和“默认” 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)

这里的新颖之处在于允许加载多个模型(一次)并在多个线程中使用。
默认情况下,加载模型时使用“默认” Session和“默认” Graph
但是在这里你创造了新的。
还要注意Graph存储在Session对象中,这样更方便一些。

谢谢你的回答
我在使用Flask和多线程时也面临这个问题, 有用

谢谢:笑脸:

系统信息

  • 我是否编写了自定义代码(而不是使用 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“将tensorflow导入为tf;打印(tf.version.GIT_VERSION,tf.version.VERSION)”
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

描述当前的行为
运行“flaskApp.py”时,加载模型并尝试使用“预测”对图像进行分类后,失败并显示错误:

tensorflow.python.framework.errors_impl.FailedPreconditionError:从容器读取资源变量softmax/内核时出错:本地主机。 这可能意味着该变量未初始化。 未找到:资源 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/dense_6/kernel/class tensorflow::Var 不存在。
[[{{节点密集_6/MatMul/ReadVariableOp}}]]

不好意思,我也面临这个问题。 但是您的回答并不能解决我的问题,也许它处于不同的状态。 在我的问题中,当我在 keras 中使用 VGG16 并且我想使用迭代功能时
loss_value, grads_value = iterate([np.zeros((1, 150, 150, 3))])
但是出现了类似的问题。
FailedPreconditionError:从容器读取资源变量 block1_conv1_12/bias 时出错:localhost。 未找到:资源 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()。 我如何解决它? 我的 TF 2.x 代码中发生了同样的问题。

@SungmanHong而不是tf.Session尝试使用tf.compat.v1.Session

在 TF 2.x 中,没有 session()。 我如何解决它? 我的 TF 2.x 代码中发生了同样的问题。

在 TF 2.X 中导入会话
tf.compat.v1.Session()
在 TF 2.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()。 我如何解决它? 我的 TF 2.x 代码中发生了同样的问题。

在 TF 2.X 中导入会话
tf.compat.v1.Session()
在 TF 2.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 Traceback(最近一次调用)
()
4 learning_rate=config.LEARNING_RATE,
5个时期=4,
----> 6 层 = = ='heads')

6帧
训练中的/usr/local/lib/python3.6/dist-packages/mrcnn/model.py(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在包装器(参数,* kwargs)
89 warnings.warn('将您的' + object_name + '调用更新为 ' +
90 'Keras 2 API:' + 签名,堆栈级别 = 2)
---> 91 返回函数(参数,* kwargs)
92 wrapper._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章
1731洗牌=洗牌,
-> 1732 initial_epoch=initial_epoch)
1733
第1734章

/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py in fit_generator(模型、生成器、steps_per_epoch、epochs、verbose、回调、validation_data、validation_steps、validation_freq、class_weight、max_queue_size、workers、use_multiprocessing ,洗牌,initial_epoch)
第218话
第219话
--> 220 reset_metrics=False)
221
222 出局 = to_list(出局)

/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 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__(self,inputs)
3630
第 3631 章
-> 3632 run_metadata=self.run_metadata)
第 3633 章
3634 output_structure = nest.pack_sequence_as(

/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py 在 __call__(self, args, * kwargs)
第1470章
第1471章
-> 1472 run_metadata_ptr)
第 1473 章
第1474章

FailedPreconditionError:从容器读取资源变量锚点/变量时出错:本地主机。 这可能意味着该变量未初始化。 未找到:资源 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 等级