返回顶部
首页 > 资讯 > 精选 >Keras多线程机制与flask多线程冲突怎么办
  • 197
分享到

Keras多线程机制与flask多线程冲突怎么办

2023-06-15 06:06:37 197人浏览 安东尼
摘要

这篇文章给大家分享的是有关Keras多线程机制与flask多线程冲突怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在使用flask部署Keras,Tensorflow等框架时候,经常出现FailedPrec

这篇文章给大家分享的是有关Keras多线程机制与flask线程冲突怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

在使用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结合的几个常见错误

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 tfgraph = tf.get_default_graph()model = models.load_model(…………)# 使用处添加:global graphglobal modelwith 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.h6')    with graph.as_default():        result = model.predict(tokens_pad)

方法二:

在创建model后,先使用一遍 model.predict(),参数的大小和真实大小一致,这个是真正解决之道,同时不影响使用速率。

# 使用前:model = models.load_model('./static/my_model2.h6')# a 矩阵大小和 tokens_pad 一致a = np.ones((1, 220))model.predict(a)# 使用时:global modelresult = model.predict(tokens_pad)

但是在使用后又遇到了 The Session graph is empty…… 的错误即第二点,不过估摸着这个是个例,应该是程序问题。

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()方法的方法的代码放到这里

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_sessionset_session(sess)model = models.load_model(…………)# 每次使用有关TensorFlow的请求时# in each request (i.e. in each thread):global sessglobal graphwith graph.as_default():    set_session(sess)    model.predict(...)————————————————

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"

感谢各位的阅读!关于“Keras多线程机制与flask多线程冲突怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Keras多线程机制与flask多线程冲突怎么办

本文链接: https://lsjlt.com/news/278483.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Keras多线程机制与flask多线程冲突怎么办
    这篇文章给大家分享的是有关Keras多线程机制与flask多线程冲突怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在使用flask部署Keras,tensorflow等框架时候,经常出现FailedPrec...
    99+
    2023-06-15
  • Keras多线程机制与flask多线程冲突的解决方案
    在使用flask部署Keras,tensorflow等框架时候,经常出现 FailedPreconditionError: Attempting to use uninitiali...
    99+
    2024-04-02
  • java多线程写文件出现冲突问题怎么解决
    在多线程写文件时,可能会出现冲突问题,可以通过以下几种方式解决: 使用锁(Lock):在文件写入操作之前,先获取一个锁,其他线程...
    99+
    2024-02-29
    java
  • android多线程机制是什么
    Android多线程机制是指在Android系统中实现并发执行的一种机制。Android提供了多种多线程机制,包括以下几种:1. A...
    99+
    2023-09-14
    android
  • java多线程机制是什么
    本篇内容主要讲解“java多线程机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java多线程机制是什么”吧!一、程序、进程、线程1.1 什么是程序程序(program):是为完成特定任...
    99+
    2023-07-02
  • Python多线程与同步机制浅析
    目录线程实现Thread类函数方式继承方式同步机制同步锁Lock条件变量Condition信号量Semaphore事件Event屏障BarrierGIL全局解释器锁线程实现 Pyth...
    99+
    2022-12-22
    Python多线程 Python同步机制
  • python多线程与多进程--存活主机p
    python多线程与多进程 多线程: 案例:扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活) 普通版本:   #扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活)import sys import ...
    99+
    2023-01-30
    多线程 进程 主机
  • Python并行编程多线程锁机制Lock与RLock实现线程同步
    目录什么是锁机制?Lock() 管理线程RLock() 与Lock()的区别什么是锁机制? 要回答这个问题,我们需要知道为什么需要使用锁机制。前面我们谈到一个进程内的多个线程的某些资...
    99+
    2024-04-02
  • Python控制多进程与多线程并发数总结
    一、前言 本来写了脚本用于暴力破解密码,可是1秒钟尝试一个密码2220000个密码我的天,想用多线程可是只会一个for全开,难道开2220000个线程吗?只好学习控制线程数了,官方文档不好看,觉得结构不够...
    99+
    2022-06-04
    多线程 进程 Python
  • Python GIL替代方案:突破多线程编程的限制
    Python GIL(全局解释器锁)是一个用于防止多线程同时执行字节代码的机制。它使Python解释器线程安全,但也会导致多线程编程性能低下。为了突破GIL的限制,人们提出了多种替代方案,其中一些方案已经集成到Python解释器中,另一些...
    99+
    2024-02-26
    Python GIL、多线程、性能、替代方案
  • python多线程及多线程有序性怎么实现
    这篇文章主要介绍了python多线程及多线程有序性怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python多线程及多线程有序性怎么实现文章都会有所收获,下面我们一起来看看吧。前言多线程一般用于同时调用...
    99+
    2023-07-02
  • c语言多线程同步机制怎么理解
    C语言多线程同步机制是指在多线程程序中,通过一些机制来保证多个线程之间的协调执行,避免出现竞争条件和死锁等问题。常见的多线程同步机制...
    99+
    2023-09-14
    c语言
  • php多线程与并发线程有什么区别
    PHP是一种脚本语言,通常用于开发Web应用程序。在PHP中,多线程和并发线程之间存在一些区别: 多线程:多线程是指在一个进程中...
    99+
    2023-10-27
    php
  • 解析Java的多线程机制(1)(转)
    解析Java的多线程机制(1)(转)[@more@]进程与应用程序的区别    进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。以Unix操作系统为例,进程是Unix操...
    99+
    2023-06-03
  • python多线程怎么自定义线程类
    这篇文章主要介绍python多线程怎么自定义线程类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(...
    99+
    2023-06-14
  • java多线程怎么保证线程安全
    Java中有多种方式可以保证线程安全,以下是一些常见的方法:1. 使用synchronized关键字:使用synchronized关...
    99+
    2023-09-13
    java
  • Java多线程怎么用
    这篇文章主要介绍了Java多线程怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、概念1.进程1进程:是一个正在进行中的程序,每一个进程执行都有一个执行顺序,该顺序是一...
    99+
    2023-06-17
  • C#多线程怎么用
    这篇文章主要为大家展示了“C#多线程怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#多线程怎么用”这篇文章吧。一、基本概念1、进程首先打开任务管理器,查看当前运行的进程:从任务管理器里面...
    99+
    2023-06-22
  • python多线程怎么用
    python多线程的使用方法:1、导入threading模块;2、创建线程对象;3、启动线程;4、等待线程执行完毕;5、多个线程同时执行;6、线程同步和通信。Python多线程是指同时使用多个线程执行代码,以实现并发执行任务的目的。Pyth...
    99+
    2023-11-20
    python 多线程
  • redis多线程怎么用
    redis 支持多线程操作,以提高并发性和吞吐量。使用pubsub机制,可以在线程之间发送和接收消息;通过线程池,可以高效分配和管理预先创建的线程。注意事项包括线程安全、使用相同redi...
    99+
    2024-05-21
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作