使用JS后端和Python进行机器学习
我需要一些资深的建议。我想使用JS创建一个API,但是所有的ML功能都使用Python。我不想摆脱像GraphQL这样的很棒的JS库,但我不想牺牲Python的性能。我知道我可以使用Tensorflow.js,但正如我所说的,在性能方面,Python要好得多 我的想法是使用Python将一个ML模型部署到云中,然后在我的JSAPI或类似的东西中获取预测 另一个想法是使用Python创建推断,将其保存为.h5或.json格式,然后在我的API中使用Tensorflow.js直接加载它们使用JS后端和Python进行机器学习,python,node.js,tensorflow,tensorflow.js,Python,Node.js,Tensorflow,Tensorflow.js,我需要一些资深的建议。我想使用JS创建一个API,但是所有的ML功能都使用Python。我不想摆脱像GraphQL这样的很棒的JS库,但我不想牺牲Python的性能。我知道我可以使用Tensorflow.js,但正如我所说的,在性能方面,Python要好得多 我的想法是使用Python将一个ML模型部署到云中,然后在我的JSAPI或类似的东西中获取预测 另一个想法是使用Python创建推断,将其保存为.h5或.json格式,然后在我的API中使用Tensorflow.js直接加载它们 本地###
本地#####
输入=输入(形状=(trainX.shape[1],trainX.shape[2],trainX.shape[3]))
...
Conv2D
Conv2D
Conv2D
...
模型=模型(输入=输入,输出=预测)
model.compile(…)
模型拟合(…)
model.save(model.json)#我认为我无法用Python将权重保存为.json格式
我真的不知道这是否可行,或者有更好的形式(或者甚至有可能)
所有的想法和建议都非常感谢。谢谢。您已经指出了两种方法,可以用来为您的ML/DL模型执行预测。我将列出每项建议所需的步骤以及我个人的建议
本地: 在这里,您必须使用Tensorflow和Python构建和训练模型。然后,要在web应用程序上使用该模型,您需要使用将其转换为正确的格式。例如,您将返回一个
model.json
和group1-shard1of1.bin
文件,然后可以使用该文件对来自客户端的数据进行预测。为了提高性能,可以在转换模型时对其进行量化
我发现这样做更容易预测,因为整个过程并不困难
模型总是在客户端,所以如果您希望快速预测,它应该是最好的选择
安全方面,如果在生产中使用此模型,则不会将任何用户数据传递到服务器端,因此用户不必担心其数据被不当使用。例如,如果您在欧盟,您必须遵守《通用数据保护条例》(GDPR)
,这将使事情变得更加复杂
在线学习
(根据看到的新数据对模型进行培训,并动态改进)应用程序编程接口: 在这里,您必须使用某种库来创建RESTAPI。我会推荐一种很容易安装和运行的。您需要创建路由,以便
将数据发布到模型中。您可以创建您发出POST
请求的路由,这些请求将从客户端接收数据,然后使用您拥有的模型对数据执行预测。然后它将在请求主体中发回预测。API和用于进行预测的代码必须托管在某个地方,以便您从客户端进行查询,您可以使用它。这贯穿了整个过程
与局部方法相比,该过程是复杂的
数据需要发送到服务器,因此,如果您需要对大量数据进行非常快速的预测,那么与本地方法相比,该方法的速度会较慢
对于生产用例,这是首选方法,除非用户数据无法发送到服务器
这些都是REST API,所以要让它与GraphQL一起工作,您必须使用详细的步骤将REST API与GraphQL打包
您可以不断改进模型,而不必接触客户端代码
我不想摆脱像GraphQL这样的很棒的JS库,但我不想牺牲Python的性能。我知道我可以使用Tensorflow.js,但正如我所说的,在性能方面,Python要好得多
我想指出的一点是,无论使用Python
还是Javascript
,模型的预测速度都是相同的。唯一可以改进它的方法是通过量化,它减少了模型大小,同时也改善了CPU和硬件加速器延迟,模型精度几乎没有下降,因为您所做的一切就是使用模型进行预测。除非在网速较慢的地区向端点发送大量数据,否则使用这两种方法之间的差异可以忽略不计
##### 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);
});