AutoML : 更有效地設計神經網路模型
- 2020 年 9 月 14 日
- AI
字幕組雙語原文:AutoML : 更有效地設計神經網路模型
英語原文:AutoML: Creating Top-Performing Neural Networks Without Defining Architectures
翻譯:雷鋒字幕組(chenx2ovo)
自動化機器學習,通常被稱為AutoML,是自動化構建指神經網路結構。AutoML通過智慧架構的操作,可以讓大家更方便、更快速的進行深度學習的研究。
在本文中,我們將介紹AutoML的以下內容:
-
如何安裝AutoKeras來進行神經網路架構搜索
-
在使用結構化、影像和文本數據進行回歸和分類任務中,如何使用AutoKeras找到最佳的神經網路架構。
-
如何評估、預測、導出(搜索到的模型)到Keras/TensorFlow,並且查看搜索到的高性能模型的架構。
關於AutoKeras的一個簡短介紹
-
通過AutoKeras這個神經架構搜索演算法,我們可以找到最好的神經網路架構,比如層中神經元的數量,架構的層數,加入哪些層,層的特定參數,比如Dropout中的濾波器大小或掉落神經元的百分比等等。當搜索完成後,你可以將模型作為常規的TensorFlow/Keras模型使用。
-
通過使用AutoKeras,你可以建立一個具有複雜組件的模型,比如嵌入和空間縮減,這些對於那些還在學習深度學習的人來說是不太容易理解的。
-
當AutoKeras創建模型時,會進行大量預處理操作,如矢量化或清理文本數據等等,都會自動完成並優化。
-
啟動和訓練搜索只需要兩行程式碼。AutoKeras擁有一個類似Keras的介面,所以它非常易於使用。
是不是很激動,讓我們正式開始叭!
安裝
在安裝前,請先確保你安裝了以下包:
-
Python 3 (AutoKeras不能在Python 2上運行)
-
TensorFlow ≥ 2.3.0 (AutoKeras基於TensorFlow構建
在命令行中,運行下列兩個命令。這樣就能正確安裝AutoKeras。注意,不能在Kaggle筆記型電腦中運行,最好在本地環境中運行。
作為測試,在編碼環境中運行import autokeras以確保一切正常。
結構化數據的分類/回歸任務
我們從著名的iris數據集開始,該數據集可以從sklearn的幾個簡單的示例數據集中導入。導入的數據是一個字典,有兩個鍵值對組成,”data “和 “target”。
然而,由於target是分類標籤(三個類別),我們需要對它進行虛擬編碼。由於結果是一個pandas DataFrame,並且需要一個NumPy數組,我們在pd.get_dummies之後調用.values(獨熱編碼)。
調用X.shape得到(150,4),調用y.shape得到(150,3)。這是說明X中包含了150行4列,y中有3個不同的類別(因此有3列)。為了評估我們的模型,我們將把數據分成訓練集和測試集。
查看數組的尺寸是一個很好的做法:
-
X_train: (105, 4)
-
X_test: (45, 4)
-
y_train: (105, 3)
-
y_test: (45, 3)
太好了!一切都很順利。我們可以開始使用Autokeras了。
導入Autokeras通常沒有問題。StructuredDataClassifier是一個在 “結構化數據 “,或者說是帶有列和標籤的標準二維數據上工作的搜索對象。max_trials參數表示要測試的模型的最大數量;在iris數據集上,由於數據集規模較小,這個參數可以設置較高一些。通常在達到max_trials之前搜索就會結束(它作為一個上限)。
對於回歸問題,使用StructuredDataRegressor。
我們可以通過調用.fit()來啟動搜索過程。verbose是一個參數,可以設置為0或1,這取決於你是否希望模型輸出訓練相關資訊,比如潛在網路的架構和每個epoch的搜索情況。然而,每個潛在架構都有數百個epoch,所以開啟這一項可能會佔用空間並減慢訓練速度。
建議設置verbose=1,來顯示整個訓練的過程。因為整個搜索過程至少會持續幾分鐘才能完成。如下面示例的輸出:
如果你願意的話,可以觀察搜索到架構隨著時間的推移而不斷變化,以及哪些元素會進入最終的神經網路。這一過程很有意思。
在我的本地環境中,在沒有GPU加速的情況下,總共花了1小時左右才跑完15次試驗。
一旦你的模型被擬合,我們就可以評估它的性能或進行預測。一般來說,這一過程速度較快,所以verbose可以設置為0。
為了查看模型結構的更多細節並保存它,我們需要使用model = search.export_model()對其進行導出。這裡的model是一個標準的TensorFlow/Keras模型,而不是AutoKeras對象。
調用model.summary()可以列印出搜索到的最佳架構。
保存模型權重,使用model.save(『filepath/weights.h5』).
影像分類/回歸
影像分類和回歸的工作原理很像標準結構化數據的分類和回歸,但他們所使用的神經網路的建立使用了卷積神經網路的元素,比如卷積層、最大池化和扁平化。其中所有的參數都是可學習的。
例如,我們在MNIST數據集上實驗,從28乘28的影像中找到一個卷積神經網路來識別數字。Keras數據集提供了一種方便的方法來檢索這些數據,但需要將y變數轉換為虛變數。
我們看一下這些數據的尺寸:
-
X_train: (60000, 28, 28)
-
X_test: (10000, 28, 28)
-
y_train: (60000, 10)
-
y_test: (10000, 10)
很強!AutoKeras還可以處理四維數據(多通道的彩色影像)。我們可以用ImageClassifier創建一個搜索對象(或者創建ImageRegressor用於回歸任務)。
*如果您正在運行多個搜索,請在定義搜索對象時添加一個參數overwrite=True (ak.object(overwrite=True, max_trials=x))。否則會出現錯誤。
評估、預測和導出模型的過程與結構化分類器和回歸器一樣。需要注意的是,對影像數據進行神經架構搜索會花費更長的時間。
文本分類/回歸
AutoKeras不需要任何文本矢量化操作,這很方便,因為當前有很多方法可以完成這一操作,而且每一種方法的實現都很漫長。在AutoKeras中這一操作這是由模型學習的。
我們使用20個新聞組數據集,它由屬於20個不同類別的若干新聞摘錄組成。為了節省時間和計算開銷,我們只選擇導入其中的四個類別,並且調大了測試集劃分規模(整個數據集的一半)。
X_train和X_test分別是由1128個原始文本字元串組成的數組,y_train和y_test分別是形狀(1128, 4)的數組。
請注意,AutoKeras可以處理可變長度的字元串!輸入的每個字元串不需要長度相同。
接下來,讓我們建立我們的文本分類器/回歸器。
*如果您正在運行多個搜索,請在定義搜索對象時添加一個參數overwrite=True (ak.object(overwrite=True, max_trials=x))。否則會出現錯誤。
評估、預測和導出與結構化分類器和回歸器一樣進行。
值得一看的是提出的網路。NLP和深度學習之間的融合可以說是非常先進,像嵌入、空間還原等複雜的元素不需要明確調用就可以實現,這很神奇。
有了AutoKeras,深度學習更容易被所有人使用!
雷鋒字幕組是一個由 AI 愛好者組成的翻譯團隊,匯聚五百多位志願者的力量,分享最新的海外AI資訊,交流關於人工智慧技術領域的行業變革與技術創新的見解。
團隊成員有大數據專家、演算法工程師、影像處理工程師、產品經理、產品運營、IT諮詢人、在校師生;志願者們來自IBM、AVL、Adobe、阿里、百度等知名企業,北大、清華、港大、中科院、南卡羅萊納大學、早稻田大學等海內外高校研究所。
如果,你也是位熱愛分享的AI愛好者。歡迎與雷鋒字幕組一起,學習新知,分享成長。
雷鋒網雷鋒網