flask keras 多线程环境下加载模型

本文介绍了在Flask应用中,使用Keras进行深度学习模型服务时遇到的多线程环境加载模型的问题。当模型有一个定时任务在新线程中进行训练和更新时,会出现Tensor不在当前图中的错误。解决方案在于理解和管理TensorFlow的图(Graph)和会话(Session),确保每个模型加载到对应的图和会话中,避免线程间的干扰。文中给出了定义类来管理和更新模型的代码示例。

keras 多线程环境下加载模型
Tensor Tensor is not an element of this graph.

问题场景

keras 使用flask 发布深度学习模型服务,模型有一个定时任务(新开了一条线程)来进行训练以及重新加载,出现了错误。

Tensor Tensor("dense_1/Sigmoid:0", shape=(?, 59), dtype=float32) is not an element of this graph.

原因

在Tensorflow中,所有操作对象都包装到相应的Session中的,所以想要使用不同的模型就需要将这些模型加载到不同的Session中并在使用的时候申明是哪个Session,从而避免由于Session和想使用的模型不匹配导致的错误。而使用多个graph,就需要为每个graph使用不同的Session,但是每个graph也可以在多个Session中使用,这个时候就需要在每个Session使用的时候明确申明使用的graph。
在调用keras的tensorflow的应用程序中,保证tensorflow的模型是单线程加载的。如果多线程加载模型的话,必须制定的Graph,以及session。

代码

1.定义class

class Tfmodel:
    # 模型
    __model = object
    # 模型版本
    __model_version = 0
    # 词向量模型
    __word_vector = object
    # 图
    __graph = object

    # session
    __session = object

    def __init__(self):
        logging.info("Tfmodel->init")

    def set_model(self, attr):
        self.__mode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值