首頁 > 軟體

如何將Keras SavedModel轉換為基於瀏覽器的Web應用程式

2021-05-20 04:30:32

在深入探討整個過程之前,讓我們先解決一下您現在可能想到的一些問題。

什麼是Keras SavedModel?

Keras模型由網路體系結構,模型權重和損失函數的優化器組成。

在磁碟上儲存模型的預設格式為SavedModel格式。這種格式使我們能夠以最小的麻煩來儲存帶有自定義物件的模型。

當權重儲存在變數目錄中時,SavedModel將優化器,損耗和網路體系結構儲存在save_model.pb檔案中。

如果沒有GPU,如何訓練Keras SavedModel?

大多數無法使用GPU的機器學習愛好者都是從Google Colaboratory上的模型開發開始的。

為什麼要將SavedModel轉換為Web應用程式?

基於Web的產品無處不在,並且通常非常易於使用。您可能現在正在通過手機,桌上型電腦或膝上型電腦的瀏覽器閱讀文章。

歸根結底,機器學習模型應在不儲存在玻璃盒子中的現實世界中使用。那麼,有什麼比通過基於Web的媒體更好地將模型帶給使用者的方法呢?

最重要的是,基於瀏覽器的應用程式不需要任何安裝軟體,並且可以從多個裝置統一訪問。

好吧,讓我們開始吧

我建立了一個簡單的情緒檢測CNN模型,該模型可以使用Python和Keras API預測7種情緒(快樂,悲傷,中立,憤怒,驚奇,恐懼和厭惡)。

在沒有先驗經驗的情況下嘗試將其轉換為適合於Web的格式有點困難。接下來,我將描述整個過程,這要歸功於Tensorflow.js文件,MDN Web文件和Firebase託管文件。

我可以將流程縮短為以下步驟:

將Keras SavedModel轉換為Tensorflow.js圖層格式

通過JavaScript和Promises載入模型

訪問使用者上傳的影象

預處理上傳的影象

在瀏覽器中進行模型推斷並通過使用者介面顯示輸出

如何將Keras SavedModel轉換為Tensorflow.js圖層格式

要將Keras SavedModel轉換為Tensorflow.js圖層格式,我們需要使用tensorflowjs_converter指令碼。我們還可以使用Python API。

因為某種原因,tensorflowjs_converter似乎在Google Colab上不起作用。

我已將模型儲存在驅動器上,檔案路徑的「我的驅動器」部分似乎出現了問題。

使用Python API可以無縫銜接,這給了我用於模型體系結構的model.json檔案和用於權重的二進位制檔案。現在,我準備在網路上使用它!

將SavedModel格式轉換為Layers格式的程式碼

可是為什麼我們需要轉換?為什麼我們不只是使用Tensorflow.js本身訓練模型?

好吧,如果您已經花費大量時間在大型資料集上訓練Keras模型,並且不想使用JavaScript重寫和訓練它,則需要執行此轉換。

如何通過JavaScript和Promise載入模型

Tensorflow.js是用於機器學習模型開發的基於JavaScript的庫。您可以在瀏覽器中以及通過流行的JavaScript運行時Node.js使用它。

您可以通過兩種不同的方式進行設定:通過使用script標籤將其包括進來,或者通過Node.js使用它。

由於我訓練的CNN模型非常簡單明瞭,因此我選擇了指令碼標籤方法。

瀏覽器的本地儲存

瀏覽器的IndexedDB儲存

從HTTP或HTTPS端點

使用Node.js從本機檔案系統

從HTTPS端點載入模型對我來說似乎是最可行的方法。所以我將模型檔案託管在Firebase上。

如何訪問使用者上傳的影象

讓我們使用HTML輸入標籤和另一個按鈕創建簡單的檔案上傳功能,單擊該按鈕即可開始進行預測計算。

接下來,我們訪問上載的影象檔案,並使用MDN Web文件中所述的物件URL顯示它。

如何預處理上傳的影象

這是特定於模型領域的,並且針對不同的應用程式需要不同的步驟。

對於我的模型,我不需要做太多事情,只需使用Tensorflow.js函數輕鬆執行一些簡單的標準化和調整大小即可。

預測函數返回預測-在我們的例子中,具有針對7種情緒的7個概率值。

我們針對每種情緒使用一個div縮放div的寬度,以指定放大的概率值,從而放大顯示在瀏覽器中的概率。

我們已經準備好所有構件! 現在,讓我們把它們放在一起。 我們將整合以下部分:

HTML標記,用作簡單的UI

用於訪問Tensorflow.js的指令碼標籤

我們的Font Awesome圖示的指令碼標籤

用於模型載入,推斷和輸出的JavaScript程式碼

好了,本文到此結束。如果對程式設計、計算機、程式設計師方面感興趣的話,歡迎私信聯絡我,隨時交流!點個關注,是對我莫大的鼓勵!


IT145.com E-mail:sddin#qq.com