基于Web的产品无处不在,并且通常非常易于使用。您可能现在正在通过手机,台式机或笔记本电脑的<em>浏览器</em>阅读文章。归根结底,机器学习模型应在不保存在玻璃盒子中的现实世界中使用。那么,有什么比通过基于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程式碼
好了,本文到此結束。如果對程式設計、計算機、程式設計師方面感興趣的話,歡迎私信聯絡我,隨時交流!點個關注,是對我莫大的鼓勵!
相關文章
基于Web的产品无处不在,并且通常非常易于使用。您可能现在正在通过手机,台式机或笔记本电脑的<em>浏览器</em>阅读文章。归根结底,机器学习模型应在不保存在玻璃盒子中的现实世界中使用。那么,有什么比通过基于Web的媒体
2021-05-20 04:30:32
客户只需要共享一个链接,并确保他们的参与者拥有web<em>浏览器</em>,就可以开始视频会议了。但在我们看来这将是Zoom面临和微软和谷歌竞争的一个劣势,因为微软和谷歌的产品不仅同样好用,而且它们还可以预先集成到各自
2021-05-20 04:30:21
在这样的天时地利人和下,<em>高通</em>推出了骁龙778G移动平台。从778G这个数字上来看,它是低于骁龙780G的产品,它的上一代是骁龙768G,是一款中端处理器,也是对供货量要求比较大的芯片。目前,荣耀、iQOO、Motorola、OPPO、r
2021-05-20 03:30:39
<em>Android</em> 12正式发布了,这次的UI设计整体更加圆润,并且强调色彩定制,用户可以自己定制色彩调节并应用全局。 以往的安卓原生系统风格都比较偏硬朗,这次的安卓12确实让人耳目一新,甚至部分UI比某些深度定制UI
2021-05-20 03:30:16
「来源: |Vue中文社区 ID:vue_fe」开篇 前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。到现在为止,前端工程师已经成为研发体系中的重要岗位之一。可是,与
2021-05-20 03:00:50
5月17日,<em>iOS</em>版微信更新至8.0.6版本 其中,在微信“拍一拍”的基础上 新增了“炸一炸”功能 引起网友热议 不仅能“放炸弹” 还能“放烟花” “炸一炸”如何设置? 「我」-「拍一拍」-「设置拍一拍」 加入会动
2021-05-20 03:00:33