Auto-Keras与AutoML:入门指南
在本教程中,你將學習如何使用Auto-Keras(Google的AutoML的開源替代品)來實現自動化機器學習和深度學習。
目前來說,深度學習從業者在數據集上訓練神經網絡時,主要正在嘗試優化和平衡兩個目標:
1.定義適合數據集性質的神經網絡體系結構;
2.在許多實驗中調整一組超參數,這將導致模型具有高精度并能夠推廣到訓練和測試集之外的數據。需要調整的典型超參數包括優化算法(SGD,Adam等),學習速率和學習速率調度以及正則化等。
根據數據集和具體問題,深度學習專家可以進行數十到數百次實驗,以找到神經網絡架構和超參數之間的平衡,這些實驗通常需要計算數百到數千小時。
剛剛提到的這種模式僅適用于專家,那非深度學習專家呢?
這就需要Auto-Keras和AutoML:
Auto-Keras和AutoML的最終目標是通過使用自動神經架構搜索(NAS)算法降低進入機器學習和深度學習的門檻。Auto-Keras和AutoML使非深度學習專家能夠以最小的深度學習領域知識或實際數據來訓練他們自己的模型。具有最小機器學習專業知識的程序員可以使用AutoML和Auto-Keras并應用這些算法,只需很少的努力即可實現最先進的性能。
聽起來好得令人難以置信?
也許你需要好好閱讀這篇文章的其余部分以找出原因。
Auto-Keras和AutoML:入門指南
在本博文的第一部分中,我們將討論自動機器學習(AutoML)和神經架構搜索(NAS),這種算法使得AutoML在應用于神經網絡和深度學習時成為可能。我們還將簡要討論Google的AutoML,這是一套工具和庫,允許具有有限機器學習專業知識的程序員在自己的數據上訓練高精度模型。
當然,谷歌的AutoML是一種專有算法,AutoML的另一種選擇是開源Auto-Keras、它是圍繞Keras和PyTorch而構建。
然后,我將向你展示如何使用Auto-Keras自動訓練網絡以及評估它。
什么是自動機器學習(AutoML)?
Auto-Keras是Google AutoML的替代品。它可以幫助你自動訓練模型,幾乎不需要干預。對于新手深度學習從業者來說,它們是很好的選擇。
在無監督學習之外,非專家的自動機器學習被認為是機器學習的“圣杯”。
想象一下通過以下方式自動創建機器學習模型的能力:
1.安裝庫/使用Web界面;
2.將庫/接口指向你的數據;
3.自動訓練數據模型而無需調整參數/需要深入了解為其提供動力的算法;
一些公司正試圖創建這樣的解決方案,其中一個就是谷歌的AutoML。Google AutoML使非常有限的機器學習經驗的開發人員和工程師能夠自動在他們自己的數據集上訓練神經網絡。
谷歌的底層AutoML算法是迭代的:
1.在訓練集上訓練網絡;
2.在測試集上評估網絡;
3.修改神經網絡架構;
4.調整超參數;
5.重復上述過程;
使用AutoML的程序員或工程師不需要定義他們自己的神經網絡架構或調整超參數,AutoML會自動為他們做這件事。
神經架構搜索(NAS)使AutoML成為可能
Google的AutoML和Auto-Keras都采用了一種稱為神經架構搜索(NAS)的算法。根據你的輸入數據集,神經架構搜索算法將自動搜索最佳架構和相應參數。神經架構搜索基本上是用一組自動調整模型的算法取代深度學習工程師/從業者!
在計算機視覺和圖像識別的背景下,神經架構搜索算法將:
1.接受輸入訓練數據集;
2.優化并找到稱為“單元”的架構構建塊,然后讓這些單元自動學習,這可能看起來類似于初始化,殘留或激活微架構;
3.不斷訓練和搜索“NAS搜索空間”以獲得更優化的單元;
如果AutoML系統的用戶是經驗豐富的深度學習從業者,那么他們可能會決定:
1.在訓練數據集的一個非常小的子集上運行NAS;
2.找到一組最佳的架構構建塊/單元;
3.獲取這些單元并手動定義在體系結構搜索期間找到的更深層次的網絡版本;
4.使用自己的專業知識和最佳實踐,在完整的培訓集上訓練網絡;
這種方法是全自動機器學習解決方案與需要專家深度學習實踐者的解決方案之間的混合體,通常這種方法比NAS自己訓練的模型性能更好。
Auto-Keras:谷歌AutoML的開源替代品
在Auto-Keras包是由在德克薩斯州A&M大學數據實驗室團隊開發。Auto-Keras是Google AutoML的開源替代品。
Auto-Keras依然是利用神經架構搜索,但應用“網絡態射”(在更改架構時保持網絡功能)以及貝葉斯優化,以指導網絡態射以實現更高效的神經網絡搜索。你可以在Jin等人的2018年出版物Auto-Keras:Efficient Neural Architecture Search with Network Morphism中找到Auto-Keras框架的全部細節。
安裝Auto-Keras:
正如Auto-Keras GitHub存儲庫所述,Auto-Keras處于“預發布”狀態-它現在還不是正式版本。其次,Auto-Keras需要Python 3.6并且只與Python 3.6兼容。如果你使用的是3.6以外的任何其他版本的Python,你將無法使用Auto-Keras軟件包。
如果你想要檢查Python版本,只需使用以下命令:
python --version如果你有Python 3.6,你可以使用pip安裝Auto-Keras:
pip install tensorflow # or tensorflow-gpu
pip install keras pip install autokeras使用Auto-Keras實現我們的訓練腳本:
讓我們繼續使用Auto-Keras實現我們的訓練腳本,打開train_auto_keras.py文件并插入以下代碼:
# import the necessary packages from sklearn.metrics import classification_report from keras.datasets import cifar10 import autokeras as ak import osdef main():# initialize the output directoryOUTPUT_PATH = "output"首先,我們在第2-5行導入必要的包:
·如前所述,我們將使用scikit-learn的classification_report來計算我們將在輸出文件中保存的統計信息。
·我們將使用CIFAR-10數據集,因為它已經被內置到keras.datasets。
·然后是導入import依賴項-autokeras,我已經將它用AK的簡寫代替。
·該os模塊是必需的,因為我們會在建立輸出文件的路徑時,在各種操作系統上容納路徑分隔符。
我們在第7行定義腳本的主要功能,由于Auto-Keras和TensorFlow處理線程的方式,我們需要將代碼包裝在main函數中。有關更多詳細信息,請參閱此GitHub問題線程。
現在讓我們初始化Auto-Keras的訓練時間列表:
# initialize the list of training times that we'll allow# Auto-Keras to train forTRAINING_TIMES = [60 * 60, # 1 hour60 * 60 * 2, # 2 hours60 * 60 * 4, # 4 hours60 * 60 * 8, # 8 hours60 * 60 * 12, # 12 hours60 * 60 * 24, # 24 hours]上述代碼是限定了一組訓練-TIMES,包括[1,2,4,8,12,24]小時。我們將使用Auto-Keras來探索更長的訓練時間對精確度的影響。
讓我們加載CIFAR-10數據集并初始化類名:
# load the training and testing data, then scale it into the# range [0, 1]print("[INFO] loading CIFAR-10 data...")((trainX, trainY), (testX, testY)) = cifar10.load_data()trainX = trainX.astype("float") / 255.0testX = testX.astype("float") / 255.0# initialize the label names for the CIFAR-10 datasetlabelNames = ["airplane", "automobile", "bird", "cat", "deer","dog", "frog", "horse", "ship", "truck"]我們的CIFAR-10數據被加載并存儲在第25行的訓練/測試分組中。隨后,我們將這個數據縮放到[0,1]的范圍。接著我們會初始化我們的類labelNames,這10個類包含在CIFAR-10中。請注意,標簽在這里很重要。
現在讓我們開始循環遍歷我們的TRAINING_TIMES,每次都使用Auto-Keras:
# loop over the number of seconds to allow the current Auto-Keras# model to train forfor seconds in TRAINING_TIMES:# train our Auto-Keras modelprint("[INFO] training model for {} seconds max...".format(seconds))model = ak.ImageClassifier(verbose=True)model.fit(trainX, trainY, time_limit=seconds)model.final_fit(trainX, trainY, testX, testY, retrain=True)# evaluate the Auto-Keras modelscore = model.evaluate(testX, testY)predictions = model.predict(testX)report = classification_report(testY, predictions,target_names=labelNames)# write the report to diskp = os.path.sep.join(OUTPUT_PATH, "{}.txt".format(seconds))f = open(p, "w")f.write(report)f.write("\nscore: {}".format(score))f.close()上面的代碼塊是今天腳本的核心。在第35行,我們在每個TRAINING_TIMES上定義了一個循環,我們在其中做以下操作:
·初始化我們的模型(AK.ImageClassifier),并讓訓練開始。請注意,我們并沒有實例化一個特定對象的CNN類,我們也沒有調整超參數。因為Auto-Keras會為我們處理所有這些。
·一旦達到時間限制,請采用Auto-Keras找到的最佳模型和參數+重新訓練模型。
·評估和構建分類報告。
·將分類報告與準確度分數一起寫入磁盤,以便我們評估更長訓練時間的影響。
我們將為每個TRAINING_TIMES重復此過程。
最后,我們將檢查并啟動執行的主線程:
# if this is the main thread of execution then start the process (our # code must be wrapped like this to avoid threading issues with # TensorFlow) if __name__ == "__main__":main()這里我們檢查確保這是執行的主線程,然后是主函數。僅僅60行代碼,我們就完成了使用CIFAR-10示例腳本編寫Auto-Keras,但是我們還沒有完成......
使用Auto-Keras訓練神經網絡
讓我們繼續使用Auto-Keras訓練我們的神經網絡。
請確保使用本教程的“下載”部分下載源代碼。
從那里打開終端,導航到下載源代碼的位置,然后執行以下命令:
$ python train_auto_keras.py [INFO] training model for 3600 seconds max... Preprocessing the images. Preprocessing finished.Initializing search. Initialization finished.+----------------------------------------------+ | Training model 0 | +----------------------------------------------+ Using TensorFlow backend.No loss decrease after 5 epochs.Saving model. +--------------------------------------------------------------------------+ | Model ID | Loss | Metric Value | +--------------------------------------------------------------------------+ | 0 | 4.816269397735596 | 0.5852 | +--------------------------------------------------------------------------++----------------------------------------------+ | Training model 1 | +----------------------------------------------+ Using TensorFlow backend. Epoch-14, Current Metric - 0.83: 28%|██████▊ | 110/387 [01:02<02:46, 1.67 batch/s]Time is out. [INFO] training model for 86400 seconds max... Preprocessing the images. Preprocessing finished.Initializing search. Initialization finished.+----------------------------------------------+ | Training model 0 | +----------------------------------------------+ Using TensorFlow backend.No loss decrease after 5 epochs. ... +----------------------------------------------+ | Training model 21 | +----------------------------------------------+ Using TensorFlow backend.No loss decrease after 5 epochs.+--------------------------------------------------------------------------+ | Father Model ID | Added Operation | +--------------------------------------------------------------------------+ | | to_deeper_model 16 ReLU | | 16 | to_wider_model 16 64 | +--------------------------------------------------------------------------+Saving model. +--------------------------------------------------------------------------+ | Model ID | Loss | Metric Value | +--------------------------------------------------------------------------+ | 21 | 0.8843476831912994 | 0.9316000000000001 | +--------------------------------------------------------------------------+ +----------------------------------------------+ | Training model 22 | +----------------------------------------------+ Using TensorFlow backend. Epoch-3, Current Metric - 0.9: 80%|████████████████████▊ | 310/387 [03:50<00:58, 1.31 batch/s]Time is out.No loss decrease after 30 epochs.在這里你可以看到我們的腳本正在指示Auto-Keras執行六組實驗。
在NVIDIA K80 GPU上,總訓練時間為3天多一點。
Auto-Keras的結果:
在上圖中,你可以看到訓練時間(x軸)對使用Auto-Keras的總體準確度(y軸)的影響。較短的訓練時間,即1小時和2小時,大約可以達到73%的準確性。一旦我們訓練4小時,我們就能達到高達93%的準確率。訓練8-12小時,我們就能獲得95%的精確度了。超過8-12小時的訓練不會提高我們的準確度,這意味著我們已達到飽和點并且Auto-Keras無法進一步優化。
Auto-Keras和AutoML值得嗎?
在無監督學習之外(從未標記數據自動學習模式),非專家的自動機器學習被認為是機器學習的“圣杯”。Google的AutoML和開源Auto-Keras軟件包都試圖將機器學習帶給大眾,即使是沒有關鍵性技術的經驗的程序員。
雖然Auto-Keras在CIFAR-10上工作得相當好,但是我使用我之前關于深度學習,醫學圖像和瘧疾檢測的文章進行了第二組實驗。我使用簡化的ResNet架構獲得了97.1%的準確率,該架構花費了不到一小時的時間進行訓練。然后我讓Auto-Keras在相同的數據集上運行24小時-結果只有96%的準確度,低于我自己定義的架構。
但不管怎樣,谷歌的AutoML和Auto-Keras都是向前邁出的一大步。
?
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的Auto-Keras与AutoML:入门指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何提高阿里云上应用的可用性(二)
- 下一篇: Node.js 应用故障排查手册 ——