如何利用Cloud ML Engine在雲中訓練機器學習模型?

在雲中訓練ML模型很有意義。為什麼?

如何利用Cloud ML Engine在雲中訓練機器學習模型?

有許多原因,首先它支持你在大規模數據計算的同時還可以訓練模型。另外,在GoogleCloud平臺上,你可以使用Cloud Machine Learning Engine在TensorFlow和其他PythonML庫(如Scikit-Learning)中訓練機器學習模型,而無需操心任何基礎設置。當然,前提是你將代碼放入了Python包。

如何利用Cloud ML Engine在雲中訓練機器學習模型?

task.py文件

作為一名資深人士,作者表示許多新手面臨的第一個困難就是創建task.py文件。雖然你可以不使用task.py文件(參見下面),但作者認為使用它還是有必要的。因為它允許你將超參數從模型邏輯中分離出來(位於model.py)。task.py文件的用途有兩個:

1,讀取和解析模型參數,如訓練數據和輸出模型的位置、隱藏層、大小等。

2,調用model.py

如何利用Cloud ML Engine在雲中訓練機器學習模型?

編寫task.py 有許多種方法- -你甚至可以給它取新名字。事實上task.py和model.py也僅僅是 一種約定俗成的叫法。只要你願意,我們也可以叫它們為task.py aReallyCoolArgument_parser.py 和model.py very_deeeep_model.py。

我們甚至可以將它倆組合成一個文件,用於參數解析和模型訓練。除了將代碼放到Python包外,ML對其他並沒有什麼要求。(也就是說,它必須包含setup.py和__init__.py,對其他則沒有什麼要求)。但是,要把task.py和model.py在一個文件夾中訓練,你需要查看Cloud ML樣本和Cloud ML訓練反饋記錄,瞭解使用Cloud ML引擎的完整示例和關於task.py、model.py的實例。

通過docopt編寫“乾淨的” task.py文件

雖然很多人喜歡使用Argparse編寫task.py(Argparse,一個用於解析命令行參數的標準Python庫),但作者更喜歡用docopt。因為作者認為這是編寫task.py最簡潔的方式。他表示如果使用docopt,你編寫的唯一東西就是程序的用法信息(即幫助信息),其他的docopt會幫你處理好。它會根據你在模塊的文檔字符串中編寫的用法消息,和你在文檔字符串中指定的格式為你生成參數解析器。這裡是具體實例。

如何利用Cloud ML Engine在雲中訓練機器學習模型?

現在作者要對它們進行拆分。第一塊代碼表示你的task.py的用途。如果你調用task.py時沒有添加參數或錯誤調用,它會對用戶(你)進行反饋。

最後是將這些參數變量分配到model.py,然後進行訓練和評估。

需要補充的是,task.py是Python包中的一部分。在實踐中,你需要花費大量時間編寫model.py,創建task.py,其餘都有樣本可尋。

如何利用Cloud ML Engine在雲中訓練機器學習模型?

因為我們是使用docopt編寫task.py,所以我們必須將它添加到setup.py(如下圖)。

如何利用Cloud ML Engine在雲中訓練機器學習模型?

最後,一旦我們有了上述結構中的文件,我們就可以向ML引擎進行提交。但這之前,我們首先得使用python -m在本地測試我們的包,然後使用ML引擎進行局部預測。(這兩個步驟是可以跳過的。但作者並不建議跳過。)

如何利用Cloud ML Engine在雲中訓練機器學習模型?

如何利用Cloud ML Engine在雲中訓練機器學習模型?

一旦測試完畢,我們需要把我們的工作產品提交給ML引擎。

如何利用Cloud ML Engine在雲中訓練機器學習模型?

下圖與我們討論的東西有關

如何利用Cloud ML Engine在雲中訓練機器學習模型?

第一行表示我們包的位置,我們通常稱其為trainer(一種慣例)。第二行表示我們在trainer中調用任務模塊(task.py)。

結語

通過建立一個task.py我們可以將超參數處理為命令行參數,這方便了我們將模型與超參數分離。一個關鍵的優勢是,這使我們可以使用不同的參數來確定最佳的超參數集。最後,docopt會基於用戶寫入的字符串完善我們的task.py文件。

希望這些能對你有所幫助。


分享到:


相關文章: