如何解决使用 JS 后端和 Python 进行机器学习
我需要一些高级建议。我想使用 JS 创建 API,但所有 ML 功能都使用 Python。我不想摆脱像 GraphQL 这样很棒的 JS 库,但我不想牺牲 Python 性能。我知道我可以使用 tensorflow.js,但正如我所说,在性能方面,Python 更好。
我的想法是使用 Python 将 ML 模型部署到云端,然后在我的 JS API 或类似的东西中获取预测。
另一个想法是使用 Python 创建推理,以 .h5 或 .json 的形式保存,然后在我的 API 中使用 tensorflow.js 直接加载它们。
##### LOCAL #####
inputs = Input(shape=(trainX.shape[1],trainX.shape[2],trainX.shape[3]))
...
Conv2D
Conv2D
Conv2D
...
model = Model(inputs=inputs,outputs=predictions)
model.compile(...)
model.fit(...)
model.save(model.json) # I dont think I can save the weights in Python in the .json format
##### API #####
https.get('SOMEURL',(resp) => {
const model = await tf.loadLayersModel('file://path/to/my-model/model.json');
const { data } = resp
return model.predict(data)
}).on("error",(err) => {
console.log("Error: " + err.message);
});
我真的不知道这是否可行,或者有更好的形式(或者甚至可能)。
感谢所有想法和建议。谢谢。
解决方法
您已经指出了可用于为 ML/DL 模型执行预测的两种方法。我将列出每项所需的步骤以及我自己的个人建议。
本地:
在这里,您必须使用 Tensorflow 和 Python 构建和训练模型。然后,要在您的 Web 应用程序上使用该模型,您需要使用 tfjs-converter 将其转换为正确的格式。例如,您会得到一个 model.json
和 group1-shard1of1.bin
文件,然后您可以使用它们对来自 client side
的数据进行预测。为了提高性能,您可以在转换模型时对其进行量化。
- 我发现通过这种方式进行预测更容易,因为整个过程并不困难。
- 模型始终位于客户端,因此如果您正在寻找非常快速的预测,它应该是最佳选择。
- 安全方面,如果在生产中使用此模型,则不会将任何用户数据传递到服务器端,因此用户不必担心他们的数据被不当使用。例如,如果您在欧盟,则必须遵守
General Data Protection Regulation (GDPR)
,这让事情变得非常复杂。 - 如果您想改进模型,则需要先训练一个新模型,然后更新 Web 应用程序以更改模型文件。您无法执行
online-learning
(根据它看到的新数据训练模型并对其进行即时改进)。
API:
在这里,您必须使用某种库来制作 REST API。我会推荐 FastAPI,它很容易启动和运行。您需要为模型创建 POST
数据的路由。您可以创建向这些请求从客户端接收数据的位置发出 POST
请求的路由,然后使用您拥有的模型对数据执行预测。然后它将发回请求正文中的预测。用于进行预测的 API 和代码必须托管在某个地方,以便您从客户端进行查询,您可以使用 Heroku 来实现这一点。此 article 贯穿整个过程。
- 与本地方法相比,流程复杂。
- 需要将数据发送到服务器,因此如果您需要对大量数据进行非常快速的预测,与本地方法相比,这种方法会更慢。
- 对于生产用例,这是首选方法,除非无法将用户数据发送到服务器。
- 这些是 REST API,因此要使其与 GraphQL 一起使用,您必须按照 here 详细说明的步骤使用 GraphQL 包装 REST API。
- 您可以不断改进模型,而无需修改客户端代码。
我不想摆脱像 GraphQL 这样很棒的 JS 库,但我不想牺牲 Python 性能。我知道我可以使用 Tensorflow.js,但正如我所说,在性能方面,Python 更好。
我想指出的一件事是,无论您使用 Python
还是 Javascript
,模型的预测速度都将相同。您可以改进它的唯一方法是量化,这会减小模型大小,同时还可以改善 CPU 和硬件加速器的延迟,而模型准确度几乎没有下降做的是使用模型进行预测。除非您在网速较慢的地区向端点发送大量数据,否则两种方法之间的差异可以忽略不计。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。