我需要一些資深的建議。我想使用JS創(chuàng)建一個(gè)API,但是所有的ML功能都使用Python。我不想擺脫像GraphQL這樣的優(yōu)秀JS庫,但我不想犧牲Python的性能。我知道我可以使用Tensorflow.js,但正如我所說的,就性能而言,Python要好得多。
我想到了一些事情,比如使用Python將一個(gè)ML模型部署到云上,然后在jsapi或類似的東西中獲取預(yù)測。
另一個(gè)想法是使用Python創(chuàng)建推斷,以.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);
});
我真的不知道這是否可行,或者有更好的形式(或者甚至是可能的)。
所有的意見和建議都將不勝感激。謝謝您。
您已經(jīng)指出了兩種方法,可以用來為您的ML/DL模型執(zhí)行預(yù)測。我將列出每一個(gè)步驟所需的和我自己的個(gè)人建議。
Local:
在這里,您必須使用Tensorflow和Python構(gòu)建和訓(xùn)練模型。然后,要在web應(yīng)用程序上使用該模型,需要使用tfjs-converter將其轉(zhuǎn)換為正確的格式。例如,您將得到一個(gè)
model.json
和group1-shard1of1.bin
文件,然后可以使用該文件對來自client side
的數(shù)據(jù)進(jìn)行預(yù)測。為了提高性能,可以在轉(zhuǎn)換模型時(shí)對其進(jìn)行量化。General Data Protection Regulation (GDPR)
,這會使事情變得更加復(fù)雜。online-learning
(根據(jù)看到的新數(shù)據(jù)訓(xùn)練模型,并動態(tài)地改進(jìn)它)。API:
在這里,您必須使用某種庫來生成restapi。我建議您使用FastAPI,它非常容易啟動和運(yùn)行。您需要為
POST
數(shù)據(jù)創(chuàng)建到模型的路由。您可以創(chuàng)建您發(fā)出POST
請求的路由,這些請求從客戶端接收數(shù)據(jù),然后使用您擁有的模型對數(shù)據(jù)執(zhí)行預(yù)測。然后它將在請求的主體中發(fā)回預(yù)測。API和用于進(jìn)行預(yù)測的代碼必須托管在某個(gè)地方,以便您從客戶端進(jìn)行查詢,您可以使用Heroku來實(shí)現(xiàn)這一點(diǎn)。本文將介紹整個(gè)過程。我想指出的一點(diǎn)是,無論使用
Python
還是Javascript
,模型的預(yù)測速度都是相同的。唯一可以改進(jìn)它的方法是通過量化,它減少了模型的大小,同時(shí)也改善了CPU和硬件加速器的延遲,模型精度幾乎沒有下降,因?yàn)槟龅闹皇鞘褂媚P瓦M(jìn)行預(yù)測。除非您將大量數(shù)據(jù)發(fā)送到網(wǎng)速較慢的區(qū)域的端點(diǎn),否則使用這兩種方法之間的差異可以忽略不計(jì)。