V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
4thmagi
V2EX  ›  TensorFlow

keras 框架与 django 框架一起使用 反复调用 model 模型 出错

  •  
  •   4thmagi · 2018-06-12 23:22:32 +08:00 · 4600 次点击
    这是一个创建于 2352 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我写了一个网页,是基于 django 的。该网页通过 session 实现了用户登录状态的判断。用户在登录情况下可以发布信息,其中可以包含图片。然后可以对发布的图片进行数字的识别。
    网页后端我使用的是 django 框架,上传一张图片传入基于 tensorflow 的 keras 模型进行预测,重复预测时,报告错误:ValueError: Tensor Tensor("Placeholder:0", shape=(3, 3, 1, 32), dtype=float32)。查了一下,原因大概是第二次预测时,model 底层 tensorflow 的 session 中还有数据。
    在网上找到的解决方法是调用模型前面加一句 keras.backend.clear_session()。但是这样的话就把我的登录状态也清空了,网页直接崩溃了。提示 python 已停止工作。
    请问有什么办法可以只清空 session 中的 TensorFlow 的相关数据?
    5 条回复    2018-06-13 16:25:15 +08:00
    4thmagi
        1
    4thmagi  
    OP
       2018-06-12 23:26:51 +08:00
    keras 除了 keras.backend.clear_session()之外有方法选择性清除 session 吗
    ipwx
        2
    ipwx  
       2018-06-13 00:13:31 +08:00 via iPhone   ❤️ 1
    拿到 Tensorflow 的输出,直接用 session.run 。这部分做成单独的 API 供调用。可以参考 tensorflow-serve。别用 keras 封装的什么 predict,细节都被掩盖了,不好改
    takato
        3
    takato  
       2018-06-13 01:18:22 +08:00
    Keras 属于上手容易。。。但是你真的用起来。。实在是不好用。。
    4thmagi
        4
    4thmagi  
    OP
       2018-06-13 10:05:41 +08:00
    @ipwx 我在每次进行上传图片进行预测的时候都会 load_model 一次,我怀疑是在 load_model 时因为上次识别已 load 过了,所以再次识别图片时,在 load 这里出错了。有没有办法在启动 django 的时候直接将训练好的模型写入 session,通过这样来避免每次识别时写入导致的出错。
    ipwx
        5
    ipwx  
       2018-06-13 16:25:15 +08:00 via iPhone   ❤️ 1
    @4thmagi 还是建议参考 tensorflow-serving,好歹官方出品。要我自己手写,我会写个 while True socket,单独运行,做微服务,然后 django 负责转接这个微服务。当然也可以考虑微服务上多线程多进程。不管则么样我不会直接用 django 调模型
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1174 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:46 · PVG 02:46 · LAX 10:46 · JFK 13:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.