将 JS 后端与 Python 一起用于机器学习

Using JS backend with Python for Machine Learning

这里需要高人指教。我想使用 JS 创建一个 API,但所有 ML 功能都使用 Python。我不想摆脱像 GraphQL 这样很棒的 JS 库,但我不想牺牲 Python 性能。我知道我可以使用 Tensorflow.js,但正如我所说,就性能而言,Python 更好。

我的想法是使用 Python 将 ML 模型部署到云端,然后在我的 JS API 或类似的东西中获取预测。

另一个想法是使用 Python 创建推理,将其保存为 .h5 或 .json 的形式,然后在我的 [=30] 中直接使用 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.jsongroup1-shard1of1.bin 文件,然后您可以使用该文件对来自 client side 的数据进行预测。为了提高性能,您可以在转换模型时对其进行量化。

  1. 我发现用这种方式进行预测更容易,因为整个过程并不困难。
  2. 模型始终在客户端,因此如果您正在寻找非常快速的预测,它应该是最佳选择。
  3. 安全方面,如果在生产中使用此模型,则不会将任何用户数据传递到服务器端,因此用户不必担心他们的数据被不当使用。例如,如果您在欧盟,则必须遵守 General Data Protection Regulation (GDPR),这确实使事情变得复杂。
  4. 如果您想改进模型,则需要训练一个新模型,然后更新 Web 应用程序以更改模型文件。您无法执行 online-learning(根据看到的新数据训练模型并即时改进它)。

API:

在这里您必须使用某种库来制作 REST API。我建议 FastAPI which is quite easy to get up and running. You would need to create routes for you to POST data to the model. You create routes that you make POST request to where these request receive the data from the client side and then using the model you have perform predictions on the data. Then it will send back the predictions in the request's body. The API and the code for making predictions would have to be hosted somewhere for you to query it from the client side, you could use Heroku for this. This article 遍历整个过程。

  1. 与本地方法相比,过程比较复杂。
  2. 需要将数据发送到服务器,因此如果您需要对大量数据进行非常快速的预测,与本地方法相比,这种方法会更慢。
  3. 对于生产用例,这是首选方法,除非用户数据无法发送到服务器。
  4. 这些是 REST API,因此要使其与 GraphQL 一起使用,您必须使用详述 here 的步骤将 REST API 与 GraphQL 包装起来。 51=]
  5. 您可以不断改进模型,而无需接触客户端代码。

I dont want to get rid of the awesome JS libraries like GraphQL, but i dont want to sacrifice the Python performance. I know I can use Tensorflow.js, but as I said, in terms of performance, Python is way better.

我想指出的一件事是,无论您使用 Python 还是 Javascript,模型的预测速度都是相同的。唯一可以改进它的方法是 量化 减少模型大小,同时改善 CPU 和硬件加速器延迟,模型精度几乎没有下降 因为您所做的只是使用模型进行预测。除非您向网速较慢的区域中的端点发送大量数据,否则使用这两种方法之间的差异可以忽略不计。