【问题标题】:Machine Learning (tensorflow / sklearn) in Django?Django 中的机器学习(tensorflow / sklearn)?
【发布时间】:2016-09-19 08:35:23
【问题描述】:

我有一个 django 表单,它正在收集用户响应。我还有一个 tensorflow 句子分类模型。将这两者放在一起的最佳/标准方法是什么。 详情:

  1. tensorflow 模型是根据烂番茄的电影评论数据训练的。
  2. 每次在我的响应模型中创建新行时,我都希望 tensorflow 代码对其进行分类(+ 或 -)。
  3. 基本上我有一个django项目目录和两个.py文件用于分类。在继续之前,我想知道将机器学习算法实施到网络应用程序的标准方法是什么。

如果你能推荐一个教程或回购,那就太棒了。 谢谢!

【问题讨论】:

  • 为什么它与服务器端发生的其他事情不同?你得到输入,你返回输出。为什么它被标记为 node.js 问题?
  • 目前我进行特征提取并将其附加到一个 numpy 数组中,这需要大量内存,我打算继续用新的响应重新训练我的 CNN。另外,我认为遍历存储在 mongoDB idk 中的响应会更容易。
  • 你是如何初始化你的 TF 会话的?每次请求进来?还是你在某个地方初始化并重复使用它?
  • rn 初始化一次并重复使用,在另一台机器上运行,上面有一个 API。

标签: django machine-learning scikit-learn tensorflow sentiment-analysis


【解决方案1】:

异步处理

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

例如,队列任务是在该字段为空白(尚未分类)的数据库行上填充字段 UserResponse.class_name(正、负)

实时通知

如果 ML 代码很慢并且希望在结果可用时立即将结果返回给用户,您可以使用上述异步方法,并与实时通知配对(例如socket.io 到浏览器 (this can be triggered from the queued task)

如果 ML 执行时间过长以至于它可能会在下面描述的同步方法中使 HTTP 请求超时,这将变得很有必要。

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

如果您需要立即返回该分类结果,并且 ML 分类 足够快 *,您可以在 HTTP 请求-响应周期内完成(ML 代码完成后返回 POST 请求, 同步)

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

【讨论】:

【解决方案2】:

好吧,我必须自己开发相同的解决方案。就我而言,我使用了 Theano。如果您使用的是 tensorflow 或 theano,则可以保存已构建的模型。因此,首先,使用您的训练数据集训练模型,然后使用您选择的库保存模型。您只需将处理预测的代码部分部署到您的 django Web 应用程序中。因此,使用简单的 POST,您可以足够快地向用户提供句子的预测类别。此外,如果您认为有必要,您可以定期运行作业以使用新的输入模式再次训练您的模型并再次保存。

【讨论】:

  • 是否可以使用收集到的数据,每月或每周自动重新训练一次模型?
  • @Dev_Man 你可以使用 Celery 定期运行这样的任务
【解决方案3】:

我建议不要使用 Django,因为它会增加解决方案的执行时间。

相反,您可以使用 node 提供一个 Reactjs 前端,该前端与作为独立服务器的 TensorFlow rest API 交互。

正如本文上面的答案所暗示的,使用 WebSockets 会更好,您可以使用反应 WebSocket module,这样一旦组件的状态发生变化,它就会刷新您的组件。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 2019-06-13
    • 2019-12-29
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2016-04-20
    • 2017-07-12
    相关资源
    最近更新 更多