Keras多线程机制与flask多线程冲突的解决方案
作者:king的江鸟 发布时间:2023-09-12 02:10:51
在使用flask部署Keras,tensorflow等框架时候,经常出现
FailedPreconditionError: Attempting to use uninitialized value batchnormalization_
或者
Tensor Tensor("crf_1/cond/Merge:0", shape=(?, ?, 260), dtype=float32) is not an element of this graph.
使用keras.backend.clear_session()可能会导致前后两处预测结果不一样,因为图发生了变化。以下是解决方案。
graph = tf.get_default_graph()
sess = tf.Session(graph=graph)
def modelpredict(content):
#keras.backend.clear_session()
global graph
global sess
with sess.as_default():
with graph.as_default():
keras.model.predict()
补充:Flask与keras结合的几个常见错误
1、 ValueError: Tensor Tensor(“dense_1/Sigmoid:0”, shape=(?, 1), dtype=float32) is not an element of this graph.
在Flask中使用tensorflow的model,一在界面中调用 model.predict() 就报下面这个错误,不过在单独的 .py 文件中使用却不报错。
ValueError: Tensor Tensor("dense_1/Sigmoid:0", shape=(?, 1), dtype=float32) is not an element of this graph.
添加如下代码可以解决:
import tensorflow as tf
graph = tf.get_default_graph()
model = models.load_model(…………)
# 使用处添加:
global graph
global model
with graph.as_default():
model.predict()
# 执行预测函数
但是我当时测试时又报了另一个bug,但是这个bug也不好解决,试了很多方法也没解决,当然最终还是可以解决的,具体解决方式参考第三点。
tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable dense_1/bias from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/dense_1/bias/class tensorflow::Var does not exist.
[[{{node dense_1/BiasAdd/ReadVariableOp}}]]
后来经过N遍测试后找到了以下两种解决方式,仅供参考:
方法一:
在调用前加载model和graph,但是这样会导致程序每次调用都需要重新加载model,然后运行速度就会很慢,不过这种修改方式是最简单的。
graph = tf.get_default_graph()
model = models.load_model('./static/my_model2.h5')
with graph.as_default():
result = model.predict(tokens_pad)
方法二:
在创建model后,先使用一遍 model.predict(),参数的大小和真实大小一致,这个是真正解决之道,同时不影响使用速率。
# 使用前:
model = models.load_model('./static/my_model2.h5')
# a 矩阵大小和 tokens_pad 一致
a = np.ones((1, 220))
model.predict(a)
# 使用时:
global model
result = model.predict(tokens_pad)
但是在使用后又遇到了 The Session graph is empty…… 的错误即第二点,不过估摸着这个是个例,应该是程序问题。
2、RuntimeError: The Session graph is empty. Add operations to the graph before calling run().
graph = tf.get_default_graph()
with graph.as_default():
# 相关代码
# 本次测试中是需要把调用包含model.predict()方法的方法的代码放到这里
3、tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable dense_1/bias from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/dense_1/bias/class tensorflow::Var does not exist.[[{{node dense_1/BiasAdd/ReadVariableOp}}]]
这个错误呢,也是TensorFlow和Flask结合使用时的常见错误,解决方式如下:
from tensorflow.python.keras.backend import set_session
# 程序开始时声明
sess = tf.Session()
graph = tf.get_default_graph()
# 在model加载前添加set_session
set_session(sess)
model = models.load_model(…………)
# 每次使用有关TensorFlow的请求时
# in each request (i.e. in each thread):
global sess
global graph
with graph.as_default():
set_session(sess)
model.predict(...)
————————————————
4、 Can't find libdevice directory ${CUDA_DIR}/nvvm/libdevice. This may result in compilation or runtime failures, if the program we try to run uses routines from libdevice
设置一下XLA_FLAGS指向你的cuda安装目录即可
os.environ["XLA_FLAGS"]="--xla_gpu_cuda_data_dir=/usr/local/cuda-10.0"
来源:https://blog.csdn.net/weixin_40939578/article/details/100154100


猜你喜欢
- 前言本文写得还是比较详细,甚至有些繁琐,有很多步骤在其他的教程文档里都是省略掉的,但是我还是要写出来,因为我当时走了很多弯路,我希望你们能够
- 1. 整体思路首先我们来梳理下整体上的实现思路,首先一点:整体思路和 vhr 一模一样。考虑到有的小伙伴可能已经忘记 vhr 中前端动态菜单
- 关于文件加载及处理1、检查python关于文件加载及处理方式文件路径是否存在,如果不存在就创建此路径。#如果不存在路径,就创建一个这样的路径
- 合成微缩效果前言图像中的模糊效果可以强烈影响被拍摄场景的感知,模糊在传达所需的尺寸和距离感方面起着重要作用。合成微缩 (miniature
- 本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下:Python版本: python3.+ 运
- 偶然在网上发现itchat这个框架,itchat是一个开源的微信个人号接口,它使python调用微信变得非常简单。看到网上有人发自己微信好友
- pycharm指定python路径,pycharm配置python环境的方法是:1、依次点击【File】、【Project Interpre
- 本文实例讲述了Python列表原理与用法。分享给大家供大家参考,具体如下:列表的基本认识列表简介列表的创建基本语法[]创建list()创建r
- 素数是编程中经常需要用到的。作为学习Python的示例,下面是一个高效求解一个范围内的素数的程序,不需要使用除法或者求模运算。#coding
- 什么是函数? 以前我们学过数学函数都知道,函数
- 一、设置SQLServer身份验证1、按下windows+R,弹出运行框。2、在弹出框中输入cmd,按下enter键。3、在dos命令窗口输
- 之前博客有用logstash-input-jdbc同步mysql数据到ElasticSearch,但是由于同步时间最少是一分钟一次,无法满足
- 前言这个系列的文章我们使用以下的顺序进行讲解:Pattern 详解;Matcher 详解;正则表达式语法详解。接下来先来介绍 Pattern
- 1. zip() 函数的介绍1.1 功能zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组
- Data Points Archive 有时, 为了让应用程序运行得更快,所做的全部工作就是在这里或那里做一些很小调整。啊,但关键在于确定如
- 成天都要与样式打交道的朋友,相信对CSS选择符(CSS Selectors)都不会陌生。不过对于刚接触或者还不是很熟悉css的朋友来说,能够
- 当我们需要批量删除数据库中的表时,对于单个删除一些表是否感到烦躁,厌倦,干脆写个脚本用得了。本脚本使用游标循环删除,对于数量比较小,用游标暂
- 文 | 李晓飞来源:Python 技术「ID: pythonall」爬虫程序想必大家都很熟悉了,随便写一个就可以获取网页上的信息,
- 前言:python由于GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病。然而在IO密集型的网络编程里,异步处理比同步处理能提升
- 1、主题如何使用Pycahrm内置终端以及远程SSH工具。2、准备工作Pycharm版本为3.0或更高连接SSH服务器3、使用SSH客户端4