Django中如何使用机器学习(tensorflow / sklearn)?

28
我有一个Django表单,用于收集用户回答。我还有一个TensorFlow句子分类模型。将这两者结合的最佳/标准方式是什么? 详情如下:
  1. Tensorflow模型在来自烂番茄网站的电影评论数据上进行训练。
  2. 每次响应模型中创建新行时,我希望Tensorflow代码对其进行分类(+或-)。
  3. 基本上,我有一个Django项目目录和两个用于分类的.py文件。在自己操作之前,我想知道实现机器学习算法到Web应用程序的标准方法是什么。
如果您能建议一些教程或仓库,那就太棒了。谢谢!

为什么它与服务器端发生的任何其他事情都不同?你得到输入,你返回输出。为什么它被标记为一个node.js问题? - user2717954
目前我正在进行特征提取并将其附加到 numpy 数组中,这需要很多内存,并且我打算使用新响应重新训练我的 CNN。此外,我认为遍历存储在 mongoDB 中的响应会更容易,不确定。 - Subrat
你是如何初始化你的TF会话的?每次请求进来时都初始化吗?还是在某个地方初始化并重复使用它? - shellbye
现在它被初始化一次并被重复使用,在另一台机器上运行,并在其之上有一个API。 - Subrat
有什么建议吗?这是一个关于编程的内容。 - Dexter
有一个教程,介绍如何使用Django部署机器学习模型:https://deploymachinelearning.com,代码可在github上获取:https://github.com/pplonski/my_ml_service - pplonski
3个回答

32

异步处理

如果您不需要从ML代码立即将分类结果传递给用户(例如,作为响应相同的POST请求提交),那么您可以始终将分类作业排队以在后台或具有更多CPU /内存资源的不同服务器上运行(例如使用django-background-tasksCelery

一个排队的任务可能是填充数据库行上的UserResponse.class_name字段(积极、消极),该字段为空白的情况下(尚未分类)。

实时通知

如果ML代码很慢,并且想要尽快将结果返回给用户,则可以使用上面描述的异步方法,并与实时通知配对(例如,使用socket.io将其发送到浏览器中(可以从排队的任务中触发此操作

如果ML执行时间非常长,会超时同步处理方式下的HTTP请求,则需要这样做。

同步处理,如果ML代码不需要CPU密集型(足够快)

如果您需要立即返回分类结果,并且ML分类足够快,则可以在HTTP请求-响应循环中(即,在ML代码完成后同步返回POST请求)这样做。

*在此,“足够快”意味着它不会超时HTTP请求/响应,并且用户不会失去耐心。


1
任何建议:https://dev59.com/t6bja4cB1Zd3GeqPlMPi - Dexter
你能提供一个做这个的例子吗?@bakkal - ascetic652

10

好的,我必须自己开发同样的解决方案。在我的情况下,我使用了Theano。如果您正在使用tensorflow或theano,则可以保存已构建的模型。因此,首先使用您选择的库对训练数据集进行模型训练,然后保存该模型。您只需要将处理预测的代码部分部署到django web应用程序中。因此,使用简单的POST请求,您可以快速地为用户提供所需的句子预测类别。此外,如果认为有必要,可以定期运行作业以使用新的输入模式再次训练模型并保存它。


能否通过使用收集的数据自动化每月或每周重新训练模型的过程? - Dev_Man
有什么建议吗?这是一个关于编程的问题,链接为https://dev59.com/t6bja4cB1Zd3GeqPlMPi - Dexter
@Dev_Man 你可以使用 Celery 定期运行这样的任务。 - Raymond Chen

2
我建议不要使用Django,因为它会增加解决方案的执行时间。
相反,您可以使用node来提供一个与TensorFlow rest API交互的Reactjs前端,该API作为独立服务器运行。
正如此帖子上面的答案建议的那样,最好使用WebSockets,您可以使用一个react WebSocket模块,这样当组件状态改变时,它将刷新您的组件。
希望这会有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接