如何使用TensorFlow服務(wù)和Flask部署Keras模型-創(chuàng)新互聯(lián)

如何使用TensorFlow服務(wù)和Flask部署Keras模型,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

西疇網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),西疇網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為西疇上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的西疇做網(wǎng)站的公司定做!

部署Keras模型通常需要抽象出你的機(jī)器學(xué)習(xí)模型,并將其與易于使用的API端點(diǎn)一起部署或集成。例如,我們可以提供一個(gè)URL端點(diǎn),任何人都可以使用它來(lái)發(fā)出POST請(qǐng)求,他們會(huì)得到模型推斷的JSON響應(yīng),而不必?fù)?dān)心其技術(shù)性細(xì)節(jié)。

我們將創(chuàng)建一個(gè)TensorFlow服務(wù)器來(lái)部署我們?cè)贙eras內(nèi)置的InceptionV3圖像分類卷積神經(jīng)網(wǎng)絡(luò)(CNN)。 然后,我們將創(chuàng)建一個(gè)簡(jiǎn)單的Flask服務(wù)器,該服務(wù)器將接受POST請(qǐng)求并執(zhí)行Tensorflow服務(wù)器所需的一些圖像預(yù)處理,并返回JSON響應(yīng)。

什么是TensorFlow服務(wù)?

TensorFlow服務(wù)是你訓(xùn)練應(yīng)用機(jī)器學(xué)習(xí)模型的方式。

如何使用TensorFlow服務(wù)和Flask部署Keras模型

了解TensorFlow服務(wù)(https://www.youtube.com/watch?v=q_IkJcPyNl0)

TensorFlow服務(wù)使得投入生產(chǎn)的過(guò)程模型更容易、更快速。它允許你安全地部署新模型并運(yùn)行實(shí)驗(yàn),同時(shí)保持相同的服務(wù)器體系結(jié)構(gòu)和API。開(kāi)箱即用,它提供了與TensorFlow的集成,而且它可以擴(kuò)展為其他類型的模型。

安裝TensorFlow服務(wù)

先決條件:請(qǐng)創(chuàng)建一個(gè)python虛擬環(huán)境,并在其中安裝帶有TensorFlow后端的Keras。在這里閱讀更多(https://keras.io/#installation)

注意:所有命令都在Ubuntu 18.04.1 LTS的python虛擬環(huán)境中執(zhí)行。

現(xiàn)在,在同一虛擬環(huán)境中運(yùn)行以下命令(使用sudo獲取root權(quán)限):

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

你可以使用以下命令升級(jí)到tensorflow-model-server的較新版本:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

我們將要構(gòu)建的目錄概述

在開(kāi)始之前了解目錄結(jié)構(gòu)將有助于我們清楚地了解每個(gè)步驟的位置。

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

你可以從我的GitHub存儲(chǔ)庫(kù)中獲取所有這些文件:https://github.com/himanshurawlani/keras-and-tensorflow-serving

導(dǎo)出用于Tensorflow服務(wù)的Keras模型

在本教程中,我們將使用download_inceptionv3_model.py在Keras中下載并保存具有Imagenet權(quán)重的InceptionV3 CNN。你可以下載keras.applications庫(kù)中提供的任何其他模型,或者如果你在Keras中構(gòu)建了自己的模型,則可以跳過(guò)此步驟。

如何使用TensorFlow服務(wù)和Flask部署Keras模型

執(zhí)行上面的腳本后,你應(yīng)該得到以下輸出:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

現(xiàn)在我們以Keras格式保存了我們的InceptionV3 CNN(inception.h6)。我們希望以TensorFlow服務(wù)器可以處理的格式導(dǎo)出我們的模型。我們通過(guò)執(zhí)行export_saved_model.py腳本來(lái)完成此操作。

TensorFlow提供了SavedModel格式作為導(dǎo)出模型的通用格式。在后臺(tái)中,我們的Keras模型完全按照TensorFlow對(duì)象進(jìn)行指定,因此我們可以使用Tensorflow方法將其導(dǎo)出。TensorFlow提供了一個(gè)便利的函數(shù)tf.saved_model.simple_save(),這適用于大多數(shù)用例。

如何使用TensorFlow服務(wù)和Flask部署Keras模型

輸出:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

我們收到此警告是因?yàn)槲覀円呀?jīng)下載了預(yù)先訓(xùn)練過(guò)的模型。我們可以使用這個(gè)模型進(jìn)行推理,但如果我們想進(jìn)一步訓(xùn)練它,我們需要在加載后運(yùn)行compile()函數(shù)?,F(xiàn)在可以安全地忽略此警告。執(zhí)行此腳本后,以下文件保存在my_image_classifier目錄中:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

假設(shè)我們將來(lái)想要更新我們的模型(可能是因?yàn)槲覀兪占烁嗟挠?xùn)練數(shù)據(jù)并在更新的數(shù)據(jù)集上訓(xùn)練了模型),我們可以這樣做:

1. 在新的keras模型上運(yùn)行相同的腳本

2. 在export_saved_model.py中將export_path ='../my_image_classifier/1'更新為export_path ='../ my_image_classifier/2'

TensorFlow服務(wù)將在my_image_classifier目錄中自動(dòng)檢測(cè)模型的新版本,并在服務(wù)器中更新它。

啟動(dòng)TensorFlow服務(wù)器

要在本地計(jì)算機(jī)上啟動(dòng)TensorFlow服務(wù)器,請(qǐng)運(yùn)行以下命令:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

·--model_base_path:這必須是一個(gè)絕對(duì)路徑,否則你會(huì)得到一個(gè)錯(cuò)誤提示:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

·--rest_api_port:Tensorflow服務(wù)將在端口8500上啟動(dòng)gRPC ModelServer,并且REST API將在端口9000上可用。

·--model_name:這將是你將用于發(fā)送POST請(qǐng)求的服務(wù)服務(wù)器的名稱。你可以在此處輸入任何名稱。

測(cè)試我們的TensorFlow服務(wù)器

如何使用TensorFlow服務(wù)和Flask部署Keras模型

從原始數(shù)據(jù)到生產(chǎn)模型(來(lái)源https://twitter.com/tensorflow/status/832008382408126464)

serving_sample_request.py腳本向TensorFlow服務(wù)服務(wù)器發(fā)出POST請(qǐng)求。輸入圖像通過(guò)命令行參數(shù)傳遞。

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

輸出:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

與后續(xù)調(diào)用相比,TensorFlow服務(wù)服務(wù)器需要稍多的時(shí)間來(lái)響應(yīng)第一個(gè)請(qǐng)求。

為什么我們需要Flask服務(wù)器?

我們可以看到,我們?cè)趕erving_sample_request.py(前端調(diào)用者)中執(zhí)行了一些圖像預(yù)處理步驟。以下是在TensorFlow服務(wù)器上創(chuàng)建Flask服務(wù)器的原因:

·當(dāng)我們向前端團(tuán)隊(duì)提供API端點(diǎn)時(shí),我們需要確保不會(huì)因預(yù)處理技術(shù)問(wèn)題而造成阻礙。

·我們可能并不總是擁有Python后端服務(wù)器(例如Node.js服務(wù)器),因此使用numpy和keras庫(kù)進(jìn)行預(yù)處理可能會(huì)很麻煩。

·如果我們計(jì)劃提供多個(gè)模型,那么我們將不得不創(chuàng)建多個(gè)TensorFlow服務(wù)服務(wù)器,并且必須在我們的前端代碼中添加新的URL。但是我們的Flask服務(wù)器會(huì)保持域URL相同,我們只需要添加一個(gè)新路由(一個(gè)函數(shù))。

·可以在Flask應(yīng)用程序中執(zhí)行基于訂閱的訪問(wèn)、異常處理和其他任務(wù)。

我們要做的是消除TensorFlow服務(wù)器和我們的前端之間的緊密耦合。

如何使用TensorFlow服務(wù)和Flask部署Keras模型

多個(gè)TensorFlow服務(wù)服務(wù)器隱藏在Flask服務(wù)器后面

在本教程中,我們將在與TensorFlow服務(wù)相同的機(jī)器和相同的虛擬環(huán)境中創(chuàng)建Flask服務(wù)器,并使用已安裝的庫(kù)。理想情況下,兩者都應(yīng)該在不同的機(jī)器上運(yùn)行,因?yàn)樘嗟恼?qǐng)求會(huì)導(dǎo)致Flask服務(wù)器因?yàn)閳?zhí)行圖像預(yù)處理而變慢。此外,如果請(qǐng)求數(shù)量非常高,單個(gè)Flask服務(wù)器可能還不夠。如果我們有多個(gè)前端呼叫者,我們可能還需要一個(gè)排隊(duì)系統(tǒng)。盡管如此,我們可以使用這種方法來(lái)制定令人滿意的概念證明。

創(chuàng)建Flask服務(wù)器

先決條件:從此處在python虛擬環(huán)境中安裝Flask。

我們只需要一個(gè)app.py文件來(lái)創(chuàng)建我們的Flask服務(wù)器。

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

轉(zhuǎn)到保存app.py文件的目錄,然后使用以下命令啟動(dòng)Flask服務(wù)器:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

·FLASK_ENV =development:這啟用了調(diào)試模式,它基本上為你提供了完整的錯(cuò)誤日志。不要在生產(chǎn)環(huán)境中使用它。

·flask run命令自動(dòng)執(zhí)行當(dāng)前目錄中的app.py文件。

·--host = 0.0.0.0:這使你可以從任何其他計(jì)算機(jī)向Flask服務(wù)器發(fā)出請(qǐng)求。要從其他計(jì)算機(jī)發(fā)出請(qǐng)求,你必須指定運(yùn)行Flask服務(wù)器的計(jì)算機(jī)的IP地址來(lái)代替localhost。

輸出:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

使用上一個(gè)命令啟動(dòng)TensorFlow服務(wù)服務(wù)器:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

這是一個(gè)腳本(auto_cmd.py),用于自動(dòng)啟動(dòng)和停止兩個(gè)服務(wù)器(TensorFlow Serving和Flask)。你也可以為兩個(gè)以上的服務(wù)器修改此腳本。

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

請(qǐng)記住更改auto_cmd.py第10行的路徑,使其指向app.py的目錄。你可能還需要更改第6行,以使其指向虛擬環(huán)境的bin。然后,你可以通過(guò)在終端中執(zhí)行以下命令從任何目錄執(zhí)行上述腳本:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

測(cè)試我們的Flask服務(wù)器和TensorFlow服務(wù)器

我們使用flask_sample_request.py腳本發(fā)出示例請(qǐng)求。該腳本基本上模仿了來(lái)自前端的請(qǐng)求:

1. 我們獲取輸入圖像,將其編碼為base64格式,并使用POST請(qǐng)求將其發(fā)送到Flask服務(wù)器。

2. Flask服務(wù)器解碼此base64格式并為我們的TensorFlow服務(wù)器預(yù)處理它。

3. 然后,F(xiàn)lask服務(wù)器向我們的TensorFlow服務(wù)器發(fā)出POST請(qǐng)求并解碼響應(yīng)。

4. 解碼后的響應(yīng)被格式化并發(fā)送回前端。

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

輸出:

如何使用TensorFlow服務(wù)和Flask部署Keras模型

如何使用TensorFlow服務(wù)和Flask部署Keras模型

我們的flask服務(wù)器目前只有一條路由用于我們的單個(gè)Tensorflow服務(wù)器。我們可以通過(guò)在不同或相同的機(jī)器上創(chuàng)建多個(gè)Tensorflow服務(wù)器來(lái)提供多種模型。為此,我們只需要在app.py文件中添加更多路由(函數(shù)),并在其中執(zhí)行所需的模型特定預(yù)處理。我們可以將這些路線提供給我們的前端團(tuán)隊(duì),讓他們根據(jù)需要調(diào)用模型。

處理跨源HTTP請(qǐng)求

考慮這樣一個(gè)場(chǎng)景,我們使用Angular發(fā)出POST請(qǐng)求,我們的Flask服務(wù)器接收OPTIONS標(biāo)頭,而不是POST。

·當(dāng)Web應(yīng)用程序在請(qǐng)求具有與其自己的源不同的源(域,協(xié)議和端口)的資源時(shí),會(huì)發(fā)出跨源HTTP請(qǐng)求。

·CORS(跨源資源共享)是一種機(jī)制,它使用其他HTTP標(biāo)頭告訴瀏覽器讓在一個(gè)源(域)上運(yùn)行的Web應(yīng)用程序有權(quán)從不同來(lái)源的服務(wù)器訪問(wèn)所選資源。在此處閱讀有關(guān)CORS的更多信息(https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)

因此,Angular不會(huì)從Flask服務(wù)器返回任何響應(yīng)。要解決這個(gè)問(wèn)題,我們必須在app.py中啟用Flask-CORS。

TensorFlow服務(wù)使機(jī)器學(xué)習(xí)集成到網(wǎng)站和其他應(yīng)用程序中變得非常容易。由于keras(https://github.com/keras-team/keras-applications)提供了大量預(yù)構(gòu)建模型,因此利用最少的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法知識(shí)來(lái)開(kāi)發(fā)超級(jí)有用的應(yīng)用程序是可能的。

關(guān)于如何使用TensorFlow服務(wù)和Flask部署Keras模型問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

標(biāo)題名稱:如何使用TensorFlow服務(wù)和Flask部署Keras模型-創(chuàng)新互聯(lián)
標(biāo)題URL:http://muchs.cn/article10/dschgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣網(wǎng)站營(yíng)銷、網(wǎng)站策劃、品牌網(wǎng)站制作域名注冊(cè)、動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司