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

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

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

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

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

什么是TensorFlow服務(wù)?

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

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

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

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

安裝TensorFlow服務(wù)

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

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

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

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

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

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

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

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

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

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

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

你可以從我的GitHub存儲庫中獲取所有這些文件: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庫中提供的任何其他模型,或者如果你在Keras中構(gòu)建了自己的模型,則可以跳過此步驟。

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

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

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

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

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

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

輸出:

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

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

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

假設(shè)我們將來想要更新我們的模型(可能是因為我們收集了更多的訓(xùn)練數(shù)據(jù)并在更新的數(shù)據(jù)集上訓(xùn)練了模型),我們可以這樣做:

1. 在新的keras模型上運行相同的腳本

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

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

啟動TensorFlow服務(wù)器

要在本地計算機上啟動TensorFlow服務(wù)器,請運行以下命令:

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

·--model_base_path:這必須是一個絕對路徑,否則你會得到一個錯誤提示:

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

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

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

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

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

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

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

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

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

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

輸出:

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

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

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

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

·當(dāng)我們向前端團隊提供API端點時,我們需要確保不會因預(yù)處理技術(shù)問題而造成阻礙。

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

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

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

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

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

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

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

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

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

我們只需要一個app.py文件來創(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文件的目錄,然后使用以下命令啟動Flask服務(wù)器:

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

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

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

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

輸出:

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

使用上一個命令啟動TensorFlow服務(wù)服務(wù)器:

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

這是一個腳本(auto_cmd.py),用于自動啟動和停止兩個服務(wù)器(TensorFlow Serving和Flask)。你也可以為兩個以上的服務(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模型

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

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

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

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

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

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

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

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

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

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

輸出:

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

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

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

處理跨源HTTP請求

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

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

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

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

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

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

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

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

廣告

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

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