跳轉到主要內容
工程的博客

如何使用MLflow實驗Keras網絡模型:二元分類影評

在你最喜歡的Python IDE使用MLflow

2018年8月23日 工程的博客

分享這篇文章

最後一篇博文,我們展示的你可以開始使用MLflow機器學習,一個開源平台管理生命周期Beplay体育安卓版本。特別是,我們說明了一個簡單的Keras /TensorFlow模型使用MLflow和PyCharm。這一次我們探索一個二進製分類Keras網絡模型。使用MLflow的跟蹤api,我們將跟蹤指標準確性和損失也就是從基線之間的運行和實驗模型訓練和驗證。我們將使用PyCharm和本地主機運行實驗。

二進製分類IMDB影評

二進製分類是一種常見的機器學習問題,你想成兩個不同的類,分類結果特別是對情感分類。對於這個示例,我們將分類電影評論為“積極的”或“負麵”評論,通過檢查檢查電機常用單詞的文本內容,表達一種情感。

借款主要來自弗朗索瓦Chollet“深度學習與Python”,Keras網絡示例代碼模塊化和修改構成作為一個MLFlow項目並結合MLflow跟蹤API記錄參數、指標和工件。

方法和實驗

互聯網電影數據庫(IMDB)一起打包Keras;它是一組50000年流行的電影,分成25000評論25000年培訓和驗證、均勻分布的“積極”和“消極”的情緒。我們將使用這個數據集進行訓練和驗證模型。

通過簡單的數據準備,我們可以將這些數據轉換為張量,作為我們的Keras numpy數組神經網絡模型的過程。(閱讀和準備數據的代碼模塊:data_utils_nn.py。)

我們將創建兩個Keras -神經網絡模型基線和實驗——訓練他們在我們的數據集。而基準模型將保持不變,我們將實驗和兩個實驗模型通過提供不同的調優參數和損失函數來比較結果。

這就是MLflow的跟蹤組件非常有助於我們評估的無數校準參數產生最好的度量模型。讓我們先看一下基線模型。

基線模型:Keras神經網絡的性能

來源:深度學習與Python

弗朗索瓦的代碼示例使用了這種Keras網絡架構選擇二進製分類。它包含三個致密層:一個隱藏層(16),一個輸入層(16),和一個輸出層(1個單位),顯示在圖。“一個隱藏的單位是一個尺寸的表示空間層,“Chollet寫道,16對這個問題來說是足夠的空間;對於複雜的問題,如圖像分類,我們總是可以提高單位或者隱藏層添加到實驗,觀察它對精度的影響和損失指標(我們將在下麵的實驗)。

而輸入和隱藏層使用線性整流函數(Rectified Linear Unit)作為一個激活函數,最終的輸出層使用乙狀結腸,其結果壓成[0,1]之間的概率。任何接近1表明積極,而低於0.5可以表明消極。

這個推薦基線架構,我們訓練我們的基本模型和日誌的所有參數,指標和工件。這段代碼,從模塊models_nn.py中所描繪的一樣,創建一個堆密度層上麵的圖。

....defbuild_basic_model(自我):base_model = models.Sequential ()base_model.add (layers.Dense (16激活=“relu”,input_shape = (10000年)))base_model.add (layers.Dense (16激活=“relu”))base_model.add (layers.Dense (1激活=“乙狀結腸”))返回base_model

接下來,在構建模型之後,我們編譯模型,以適當的損失函數和優化。因為我們期待可能性作為我們的最終輸出,為二進製分類推薦的損失函數binary_crosstropy優化器和相應的建議rmsprop。從模塊的代碼片段train_nn.py編譯我們的模型。

keras進口優化器如果優化器= =“rmsprop”:選擇= optimizers.RMSprop (lr = lr)模型。編譯(優化器=選擇,損失= binary_crossentropy,指標=(“準確性”))

最後,我們配合(火車)和評估通過運行迭代或時代從IMDB默認批大小512個樣本數據集對於每個迭代,用默認參數:

  • 時代= 20
  • 損失= binary_misantropy
  • 單位= 16
  • 隱藏層= 1

從命令行運行,cd Git存儲庫目錄keras / imdbclassifier並運行:

python main_nn.py

或從GitHub回購頂級目錄中運行:

主要mlflow運行keras / imdbclassifier - e

或直接從Gitbub:

mlflow運行' https://github.com/dmatrix/jsd-mlflow-examples.git keras / imdbclassifier '

https://www.youtube.com/watch?v=6oGIwyAlUIM
圖1:動畫在本地主機上運行基本模型參數

在運行結束時,該模型將打印一組最終指標等binary_loss,binary_accuracy,validation_loss,validation_accuracy畢竟對於訓練集和驗證集迭代。

圖2:結果與基本模型和指標運行參數

從運行時,您將注意到損失隨迭代精度提高的同時,與前彙聚成0,後者向1。

我們最後的訓練數據(binary_loss0.211)聚合和驗證數據(validation_loss)跟蹤0.29——有些密切跟蹤binary_loss。另一方麵,準確性分化幾個時代表明我們可能會過度擬合訓練數據(參見下麵的圖)。

(請注意:訪問這些情節,啟動MLFlow UI,點擊任何實驗運行和訪問其工件的文件夾。)

與看不見的IMDB評論預測時,預測結果精度平均在0.88,這是接近我們驗證準確性,但仍相當遙遠。然而,正如你所看到的,對於一些評論網絡自信地預測結果有99%的概率一個積極的評論。

圖3:Matplotlib工件記錄基礎和實驗模型參數
圖3 b: Matplotlib工件記錄基礎和實驗模型參數

在這一點上,觀察指標的基本模型後,你可能會問,我們能做得更好嗎?我們可以調整一些調優參數如隱藏層,時代,損失函數或單位影響更好的結果。讓我們嚐試一些推薦的實驗。

實驗模型:Keras神經網絡的性能

MLflow的跟蹤組件讓我們來跟蹤實驗運行我們的模型有不同的參數和堅持他們的指標和工件進行分析。讓我們啟動運行下麵的實驗參數,Chollet表明,不同於默認的模型,觀察的結果:

模型 單位 時代 損失函數 隱藏層
基地 16 20. binary_crosstropy 1
實驗一 32 30. binary_crosstropy 3
實驗二 32 20. 均方誤差 3

表1:模型和參數

在本地主機上運行實驗

因為我們在本地機器上運行MLflow,所有結果都在本地登錄。但是,您可以輕鬆記錄指標遠程服務器上托管跟蹤磚,隻需設置一個環境變量MLFLOW_TRACKING_URI或以編程方式設置mlflow.set_tracking_uri ()

連接到一個跟蹤URI和日誌的結果。在這兩種情況下,URI可以遠程服務器的HTTP / HTTPS URI,或本地路徑目錄。在本地主機上,默認為一個URImlruns目錄中。

在與MLFlow PyCharm運行實驗

因為我喜歡PyCharm Python開發,我將我的筆記本電腦上運行我的實驗在PyCharm,提供實驗參數。下麵是一個動畫從第一個實驗。(學習如何使用MLflow PyCharm內閱讀我以前的博客)。

雖然我跑在PyCharm實驗提供參數的運行配置,您可以簡單地在命令行中運行這些實驗的頂級目錄,:

主要mlflow運行keras / imdbclassifier - e - p hidden_layers = 3 - p時代= 30主要mlflow運行keras / imdbclassifier - e - p hidden_layers = 3 = 32 p損失= mse - p輸出

https://www.youtube.com/watch?v=Wgt6f6CfpkY
圖4:動畫與實驗一模型運行參數

所有實驗的運行記錄,我們可以檢查每個度量和比較各種運行評估結果。所有這些工件使用日誌的代碼MLflow跟蹤API是在train_nn.py模塊。這是一個部分的代碼片段:

....mlflow.start_run ():#日誌參數mlflow.log_param (“hidden_layers”args.hidden_layers)mlflow.log_param (“輸出”args.output)mlflow.log_param (“時代”args.epochs)mlflow.log_param (“loss_function”args.loss)#日誌指標mlflow.log_metric (“binary_loss”ktrain_cls.get_binary_loss(曆史))mlflow.log_metric (“binary_acc”ktrain_cls.get_binary_acc(曆史))mlflow.log_metric (“validation_loss”ktrain_cls.get_binary_loss(曆史))mlflow.log_metric (“validation_acc”ktrain_cls.get_validation_acc(曆史))mlflow.log_metric (“average_loss”,結果0])mlflow.log_metric (“average_acc”,結果1])#日誌構件(matplotlib圖像損失/準確性)mlflow.log_artifacts (image_dir)#日誌模式mlflow.keras。log_model (keras_model model_dir)打印(“損失函數使用”args.loss)如果__name__ = =“__main__ ':##主要用於測試功能#解析器= KParseArgs ()args = parser.parse_args ()國旗=len(sys.argv) = =1如果國旗:打印(“使用默認基線參數”)其他的:打印(“使用實驗參數”)打印(”hidden_layers:“args.hidden_layers)打印(輸出:“args.output)打印(”時代:“args.epochs)打印(損失:“args.loss)KTrain ()。train_models (args,標誌)

比較實驗,結果與MLFlow UI

現在最好的部分。MLflow允許您查看所有從MLflow GUI運行並記錄結果,在那裏你可以比較這三個運行的指標。最近的UI的改進MLFlow v0.5.1比較運行提供更好的經驗。

推出一個燒瓶跟蹤服務器在localhost: 5000年,使用命令行mlflow ui

圖5:MLflow UI表視圖的所有運行的指標、參數和工件

例如,我可以比較這三個實驗的指標看,產生一個可接受的運行驗證的準確性和損失以及查看每個實驗的跨時代matplotlib圖像情況會怎樣。

https://www.youtube.com/watch?v=89I0Tro8BAQ
圖6:動畫的指標與實驗參數

比較結果從三分

通過快速檢查MLFlow UI中運行時,我們可以很容易地觀察如下:

  • 改變時代的數量並沒有給我們帶來任何好處,除了開始過度擬合模型,訓練精度達到99%,沒有相應的差異驗證準確性,它發散後幾個時代。
  • 改變了損失函數均方誤差、單位32和隱藏層,然而,給了我們一個更好的驗證以及收斂損失average_loss驗證數據為0。密切與其他指標跟蹤模型,兩個額外的隱藏層和更多的單位損失最小化的驗證。
圖7:比較三個運行參數

改進模型和進一步的實驗指標

值得注意的是,弗朗索瓦Chollet認為進一步培訓、驗證和測試(TVT),我們可以達到更高的精度,超過95%,收斂損失0.01%。實現它的一個方法是用機器學習技術,如通過進一步實驗
添加更多數據,simple-hold驗證,k-fold驗證,增加重量正規化,添加輟學網絡層,增加網絡容量。這些可以減少過度擬合,實現通用化和結果驅動更好的精度和最小損失。

我們可以實現這些技術,開展進一步的實驗,並使用MLflow評估結果。我把它留給讀者作為練習。

因為這樣的實驗和迭代的核心數據科學家評估模型,MLflow促進這樣的生命周期任務。程度,這個博客證明MLflow的部分功能。

封閉的思想

到目前為止,我們演示了關鍵使用MLflow跟蹤組件的api日誌模型的各種參數,指標和工件,以便在任何時候或任何人都可以複製的結果模型的MLflow Git項目存儲庫。

其次,通過命令行、PyCharm運行和MLFlow UI,我們比較各種運行檢查的最佳指標,發現通過改變一些參數,我們或許可以找到一個模型,使用可接受的精度進行情感分類IMDB影評基於常用單詞,表達正麵或負麵評論。更好的是,如上所述,我們可以進一步改善我們的模型使用建議機器學習技術的結果。

最後,但重要的是,我們嚐試使用內MLflow PyCharm本地主機,但我們可以跟蹤實驗在遠程服務器上。MLflow Numpy,熊貓,Keras TensorFlow包安裝作為我們PyCharm Python虛擬環境的一部分,這個係統的迭代模型實驗是一個重要的步驟在機器學習模型的生命周期。和MLflow平台促進這一關鍵Beplay体育安卓版本step-all在你最喜歡的Python IDE。

接下來是什麼

現在我們已經比較基線模型的實驗模型和我們看到MLflow的優點,下一步是什麼?嚐試MLflowmlflow.org開始。或者嚐試一些教程和示例文檔。

閱讀更多

以下是一些參考資料給你了解更多:

免費試著磚

相關的帖子

看到所有工程的博客的帖子
Baidu
map