使用JS后端和Python進(jìn)行機(jī)器學(xué)習(xí)

我需要一些資深的建議。我想使用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.jsongroup1-shard1of1.bin文件,然后可以使用該文件對來自client side的數(shù)據(jù)進(jìn)行預(yù)測。為了提高性能,可以在轉(zhuǎn)換模型時(shí)對其進(jìn)行量化。

  1. 我發(fā)現(xiàn)用這種方法做預(yù)測比較容易,因?yàn)檎麄€(gè)過程并不困難。
  2. 模型總是在客戶端,所以它應(yīng)該是最好的選擇,如果你正在尋找非常快速的預(yù)測。
  3. 安全方面,如果在生產(chǎn)中使用此模型,則不會將任何用戶數(shù)據(jù)傳遞到服務(wù)器端,因此用戶不必?fù)?dān)心數(shù)據(jù)被不當(dāng)使用。例如,如果你在歐盟,你就必須遵守General Data Protection Regulation (GDPR),這會使事情變得更加復(fù)雜。
  4. 如果您想改進(jìn)模型,那么您需要訓(xùn)練一個(gè)新模型,然后在web應(yīng)用程序上進(jìn)行更新以更改模型文件。您無法執(zhí)行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è)過程。

  1. 與局部方法相比,這個(gè)過程是復(fù)雜的。
  2. 數(shù)據(jù)需要發(fā)送到服務(wù)器,因此,如果您需要對大量數(shù)據(jù)進(jìn)行非常快速的預(yù)測,那么與本地方法相比,這將是較慢的。
  3. 對于生產(chǎn)use-cases,這是首選方法,除非用戶數(shù)據(jù)無法發(fā)送到服務(wù)器。
  4. 這些都是restapi,所以要讓它與GraphQL一起工作,就必須使用這里詳述的步驟將restapi與GraphQL打包。
  5. 您可以不斷地改進(jìn)模型,而不必接觸客戶端代碼。

我不想擺脫像GraphQL這樣的優(yōu)秀JS庫,但我不想犧牲Python的性能。我知道我可以使用Tensorflow.js,但正如我所說的,就性能而言,Python要好得多。

我想指出的一點(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ì)。

主站蜘蛛池模板: 日本一区二区三区精品国产| 中文字幕AV无码一区二区三区| 亚洲视频一区二区三区| 国产精品无码亚洲一区二区三区| 国产一区二区福利| 日韩毛片一区视频免费| 亚洲欧美日韩一区二区三区| 免费av一区二区三区| 亚洲国产成人久久一区久久| 国产精品一区二区无线| 麻豆精品人妻一区二区三区蜜桃| 日韩精品无码一区二区中文字幕| 精品一区二区三区色花堂| 八戒久久精品一区二区三区 | 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 精品久久久久久无码中文字幕一区| 无码一区二区三区免费| av无码人妻一区二区三区牛牛 | 夜夜爽一区二区三区精品| 国产精品成人一区二区三区| 偷拍激情视频一区二区三区| 久久精品无码一区二区WWW| 色窝窝无码一区二区三区| 无码人妻一区二区三区免费看 | 国产精品污WWW一区二区三区| 精品日韩一区二区三区视频| 日韩成人一区ftp在线播放| 国产福利酱国产一区二区| 国产色欲AV一区二区三区| 国产在线无码视频一区| 欧洲精品一区二区三区在线观看 | 色老板在线视频一区二区| 亲子乱av一区二区三区| 精品国产免费一区二区三区香蕉 | 色偷偷久久一区二区三区| 亚洲福利秒拍一区二区| 久久青青草原一区二区| 视频精品一区二区三区| 免费看一区二区三区四区| 任你躁国语自产一区在| 亚洲欧美一区二区三区日产 |