本文由 「AI前線」原創,原文連接: Keras做者力推開源框架Lore:15分鐘搞定深度學習模型從配置到部署
做者|Montana Low
譯者|Debra
編輯|Emily
AI 前線導讀:今天,Keras 的做者 Francois Chollet 轉推了一篇文章,教你們基於開源框架 Lore 在 15 分鐘內創建深度學習模型,用 Python 配置、構建、部署和維護深度學習模型。真的能在這麼短的時間內構建深度學習模型嗎?咱們來一探究竟。python
隨着 Instacart 的發展,咱們學到了一些知識,可是獲取知識的方法卻並不簡單。咱們的開源框架 Lore ,可讓工程師距離機器學習更進一步,並且機器學習研究人員也能夠操做。git
開源框架 Lore 連接:github
機器學習通常給人的印象是這樣的:算法
呃,這張紙並無告訴我它的工做方式......數據庫
常見問題編程
爲了解決這些問題,咱們正在對 Lore 中的機器學習進行標準化。在 Instacart,咱們的三個團隊正在使用 Lore 進行機器學習開發,目前已經能夠運行十幾種 Lore 模型。json
TLDR緩存
如下是在沒有上下文的狀況下進行快速預測的演示,你能夠從 github 複製my_app
。若是想了解全程,請跳至大綱。bash
$ pip3 install lore
$ git clone https://github.com/montanalow/my_app.git
$ cd my_app
$ lore install # caching all dependencies locally takes a few minutes the first time
$ lore server &
$ curl "http://localhost:5000/product_popularity.Keras/predict.json?product_name=Banana&department=produce"
複製代碼
功能規格
在 15 分鐘內將本身的深度學習項目投入生產,你就能充分體會到 Lore 的優點在哪裏了。若是你想在編寫代碼以前查看一下功能規格,請參閱如下簡要概述:
15 分鐘構建深度學習框架大綱
只要懂得基本的 Python 知識,就能夠開始這個任務了。若是你的機器不能進行學習,就能夠用剩下的時間好好探索機器學習的複雜性。
建立一個新的應用程序
Lore 獨立管理每一個項目的依賴關係,以免與你的系統 Python 或其餘項目發生衝突。將 Lore 以標準的 pip 軟件包安裝:
# On Linux
$ pip install lore
# On OS X use homebrew python 2 or 3
$ brew install python3 && pip3 install lore
複製代碼
當你沒法建立相同的環境時,就很難重複別人的工做。 Lore 保留你的操做系統 Python 的工做方式,以防止依賴性錯誤和項目之間發生衝突。每一個 Lore 應用程序都有它本身的目錄,有本身的 Python 安裝,以及把各自須要的依賴關係鎖定到 runtime.txt 和 requirements.txt 中的特定版本。這使得分享 Lore 應用程序的效率更高,並使咱們的機器學習項目向避免重複性方面邁進了一步。
安裝 Lore 後,你就能夠建立一個新的深度學習項目應用程序。Lore 默認是模塊化的,所以咱們須要指定keras
來安裝此項目的深度學習依賴項。
$ lore init my_app --python-version=3.6.4 --keras
複製代碼
設計模型
咱們將演示如何創建一個模型,僅根據名稱和所屬的分類預測商品在 Instacart 網站上受歡迎的程度。世界各地的製造商都會測試各類類產品的名稱,零售商則經過優化產品以最大限度地提升產品的吸引力。咱們這個簡單的人工智能將提供相同的服務。
機器學習最難的挑戰之一就是獲取優質數據。幸運的是,Instacart 已經爲此任務公開了 300 萬份匿名貨物訂單,並從新進行調整。而後,咱們能夠將問題建立成一個監督式學習迴歸模型,該模型根據 2 個特徵預測年銷售量:產品名稱和分類。
請注意,咱們將創建的模型僅用於演示,並沒有沒有實際用途。咱們給好奇的讀者提供了一個很好的模型,僅供練習。
生成框架
$ cd my_app
$ lore generate scaffold product_popularity --keras --regression --holdout
複製代碼
每一個 Lore 模型包括一個用於加載和編碼數據的管道,以及一個部署特定機器學習算法的估算器。這個模型有趣的地方在於類別生成實現過程的細節。
整個過程從左側的原始數據開始,並將其編碼爲右側所需的形式。而後使用編碼數據、驗證測試提早終止數據對估算器進行訓練,並在測試集上進行評估。全部內容均可以在模型存儲區進行序列化,而後再次加載數據循環進行訓練。
模型工做原理示意圖
管道部署
不多有原始數據徹底適用於機器學習算法。一般咱們從數據庫得到原始數據或下載一個 CSV 文件,進行調整以適應算法,而後將其分爲爲訓練集和測試集。 lore.pipelines
中的基類將此邏輯按照標準化流程執行。
lore.pipelines.holdout.Base
將數據分紅訓練、驗證和測試集,並對咱們的機器學習算法進行編碼。咱們的子類將負責定義 3 種方法:get_data
,get_encoders
和get_output_encoder
。
Instacart 公佈的數據分佈在多個 csv 文件中。
管道的get_data
將下載原始 Instacart 數據,並使用 pandas 將其加入到具備(product_name,department)
和對應的銷售總量(sales)
的DataFrame
中:
這是get_data
的部署:
接下來,咱們須要爲每列指定一個編碼器。計算機科學家可能會認爲編碼器是有效機器學習的一種類型註釋形式。有些產品的名字挺可笑,因此咱們會選取它們的前 15 個單詞。
這就是整個工做流程。咱們的初始估算器將做爲 lore.estimators.keras.Regression 的一個簡單子類,它構建了一個具備合理默認值的經典深度學習框架。
# my_app/estimators/product_popularity.py
import lore.estimators.keras
class Keras(lore.estimators.keras.Regression):
pass
複製代碼
最後,咱們的模型經過將它們返回估算器,並從構建的框架中提取數據,來實現深度學習架構的高級屬性。
測試代碼
生成框架時,該模型會自動進行冒煙測試。第一次運行測試須要多花一些時間來下載 200MB 的測試數據集。最好先處理一下./tests/data
中的文件緩存,將其放入 repo 中,以消除網絡依賴,加速測試。
$ lore test tests.unit.test_product_popularity
複製代碼
訓練模型
訓練模型的數據將緩存在./data
中,並將工件保存在./models
中。
$ lore fit my_app.models.product_popularity.Keras --test --score
複製代碼
按照第二個終端中的日誌查看 Lore 的耗時狀況。
$ tail -f logs/development.log
複製代碼
試着添加更多的隱藏圖層,看看是否對模型score
有幫助。你能夠編輯模型文件,或直接經過命令行調用屬性以適應 --hidden_layers = 5
。緩存數據集可能須要大約 30 秒。
檢查模型的功能
你能夠在你的 Lore 環境中運行 jupyter 筆記本。Lore 將安裝一個自定義 jupyter 內核,並使用你建立的應用程序的虛擬 env,用於lore notebook
和lore console
。
瀏覽notebooks / product_popularity / features.ipynb
並「所有運行」以查看模型最後一次適配的可視化效果。
「生產」部門被編碼爲「20」
能夠看到,針對特定功能時,該模型的預測值和測試集(金色)吻合程度很高。在這個案例中,有 21 個種類都達到了很好的重疊效果,除了「produce」這個類別,由於模型沒有徹底計算其有多少異常值。
你還能夠看到由/ product_popularity / architecture.ipynb
腳本生成的深度學習框架。
15 個標記名稱經過左側的 LSTM 運行,種類名稱放入右側的嵌入,而後二者均經過隱藏層。
爲模型提供服務
Lore 應用程序能夠做爲一個本地模型 HTTP API。默認狀況下,模型將經過 HTTP GET 端點公開他們的「預測」方法。
個人結果代表,將「有機」添加到「香蕉」,"農產品"的銷量將提升兩倍。 「綠色香蕉」的銷量預計會比「布朗香蕉」差。
投入生產
Lore 能夠經過全部支持 Heroku buildpack 的基礎架構進行部署。 部署容器的runtime.txt
和requirements.txt
中的 Buildpacks 安裝有具體規範。若是你想在雲端橫向擴展,能夠按照 heroku 的入門指南進行操做。
你能夠查看每次在
./models/my_app.models.product_popularity/Keras/
中進行 lore fit 命令的結果。該目錄和./data/
默認位於.gitignore
中,由於你的代碼能夠隨時重建它們。一個簡單的部署策略,是插入所要發佈的模型版本。
$ git init .
$ git add .
$ git add -f models/my_app.models.product_popularity/Keras/1 # or your preferred fitting number to deploy
$ git commit -m "My first lore app!"
複製代碼
Heroku 能夠輕鬆發佈應用程序。這是他們的入門指南。
devcenter.heroku.com/articles/ge…
這是 TLDR:
$ heroku login
$ heroku create
$ heroku config:set LORE_PROJECT=my_app
$ heroku config:set LORE_ENV=production
$ git push heroku master
$ heroku open
$ curl 「`heroku info -s | grep web_url | cut -d= -f2`product_popularity.Keras/predict.json?product_name=Banana&department=produce」
複製代碼
下一步
咱們認爲這個框架的 0.5 版本爲社區一塊兒構建 1.0 版本奠基了堅實的基礎。發佈修補程序版本能夠避免重大改動,但次要版本可能會根據社區需求更改功能,棄用舊版本並進行更新升級。
如下是咱們計劃在 1.0 版本以前添加的一些功能:
感謝 Jeremy Stanley、Emmanuel Turlay 和 Shrikar Archak 對代碼的貢獻。
原文連接:
tech.instacart.com/how-to-buil…
更多幹貨內容,可關注AI前線,ID:ai-front,後臺回覆「AI」、「TF」、「大數據」可得到《AI前線》系列PDF迷你書和技能圖譜。