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

2018-06-12 23:22:32 +08:00
 4thmagi
我写了一个网页,是基于 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 的相关数据?
4624 次点击
所在节点    TensorFlow
5 条回复
4thmagi
2018-06-12 23:26:51 +08:00
keras 除了 keras.backend.clear_session()之外有方法选择性清除 session 吗
ipwx
2018-06-13 00:13:31 +08:00
拿到 Tensorflow 的输出,直接用 session.run 。这部分做成单独的 API 供调用。可以参考 tensorflow-serve。别用 keras 封装的什么 predict,细节都被掩盖了,不好改
takato
2018-06-13 01:18:22 +08:00
Keras 属于上手容易。。。但是你真的用起来。。实在是不好用。。
4thmagi
2018-06-13 10:05:41 +08:00
@ipwx 我在每次进行上传图片进行预测的时候都会 load_model 一次,我怀疑是在 load_model 时因为上次识别已 load 过了,所以再次识别图片时,在 load 这里出错了。有没有办法在启动 django 的时候直接将训练好的模型写入 session,通过这样来避免每次识别时写入导致的出错。
ipwx
2018-06-13 16:25:15 +08:00
@4thmagi 还是建议参考 tensorflow-serving,好歹官方出品。要我自己手写,我会写个 while True socket,单独运行,做微服务,然后 django 负责转接这个微服务。当然也可以考虑微服务上多线程多进程。不管则么样我不会直接用 django 调模型

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/462623

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX