機器學習有哪些好的DEMO可以用來快速入門?

程序猿猴寶庫


有個很簡單的機器學習Demo,我們可以使用MNIST數據集在10分鐘內進行圖像分類,當您開始使用神經網絡學習深度學習時,您會意識到最強大的受監督的深度學習技術之一就是卷積神經網絡(簡稱為“ CNN”)。CNN的最終結構實際上與規則神經網絡(RegularNets)非常相似,其中存在具有權重和偏差的神經元。另外,就像在RegularNets中一樣,我們在CNN中使用損失函數(例如交叉熵或softmax)和激活函數(例如adam)。另外,在CNN中,還包括卷積層,池化層和全連接層。CNN主要用於圖像分類,儘管您可能會發現其他應用領域,例如自然語言處理等等。

CNN中的圖層

我們能夠在卷積神經網絡中使用許多不同的層。但是,卷積、池化和全連接層是最重要的。因此,在實現它們之前,我將快速介紹這些層。

卷積層

卷積層是我們從數據集中的圖像中提取特徵的第一層。由於像素僅與相鄰像素和緊密像素相關,因此卷積允許我們保留圖像不同部分之間的關係。卷積基本上是使用較小的像素過濾器對圖像進行過濾,以減小圖像的大小,而不會丟失像素之間的關係。當我們通過使用步幅為1x1的3x3濾鏡(每步偏移1個像素)將卷積應用於5x5圖像時。我們最終將獲得3x3的輸出(複雜度降低了64%)。

池化層

構造CNN時,通常在每個卷積層之後插入池化層,以減小表示的空間大小,從而減少參數計數,從而降低計算複雜度。此外,合併層還有助於解決過度擬合問題。基本上,我們選擇池大小以通過選擇這些像素內的最大值,平均值或總和值來減少參數數量。最大池化是最常見的池化技術之一,可以通過以下方式進行演示:

全連接層

一個完全連接的網絡是我們的CNN,其中每個參數相互鏈接,以確定每個參數在標籤上的真實關係和效果。由於卷積和池化層大大降低了時空複雜度,因此我們可以最終構建一個完全連接的網絡來對圖像進行分類。一組完全連接的層如下所示:

既然您對我們將要使用的各個層有了一些瞭解,我認為現在該分享一個完整的卷積神經網絡的概貌。

現在,您有了可以構建的用於圖像分類的卷積神經網絡的概念,我們可以獲得用於分類的最陳詞濫調的數據集:MNIST數據集,它代表改良的美國國家標準技術研究院數據庫。是一個龐大的手寫數字數據庫,通常用於訓練各種圖像處理系統。

下載Mnist數據

MNIST數據集是用於圖像分類的最常見數據集之一,可從許多不同來源訪問。實際上,甚至Tensorflow和Keras都允許我們直接從其API導入和下載MNIST數據集。因此,我將從以下兩行開始,以在Keras API下導入tensorflow和MNIST數據集。

NIST數據庫包含60,000張訓練圖像和10,000張測試圖像,這些圖像是從美國人口普查局員工和美國高中學生那裡拍攝的。因此,在第二行中,我將這兩個組分別作為訓練和測試,並且還分離了標籤和圖像。x_train和x_test部分包含灰度RGB代碼(從0到255),而y_train和y_test部分包含從0到9的標籤,這些標籤代表它們實際的編號。為了形象化這些數字,我們可以從matplotlib獲得幫助。

當我們運行上面的代碼時,我們將獲得RGB代碼的灰度可視化效果,如下所示。

建立卷積神經網絡

我們將使用高級Keras API構建模型,該API在後端使用TensorFlow或Theano。我想提到的是,有幾種高級TensorFlow API,例如Layers,Keras和Estimators,它們可以幫助我們創建具有高級知識的神經網絡。但是,由於它們的實現結構各不相同,因此可能會造成混亂。因此,即使它們都使用了張量流,但如果您看到的是相同神經網絡的完全不同的代碼,這就是原因。我將使用最直接的API,即Keras。因此,我將從Keras導入順序模型並添加Conv2D,MaxPooling,Flatten,Dropout和Dense圖層。我已經討論過Conv2D,Maxpooling和Dense層。此外,Dropout層通過在訓練時忽略某些神經元來對抗過度擬合,而Flatten層在構建完全連接的層之前將2D數組展平為1D數組。

我們可以為第一個Dense層嘗試任何數字;但是,由於我們有10個數字類別(0、1、2,…,9),因此輸出層必須具有10個神經元。您可以始終在第一個Dense層中嘗試內核大小,池大小,激活函數,丟失率和神經元數量的實驗,以獲得更好的結果。

編譯和擬合模型

使用上面的代碼,我們創建了一個未經優化的空CNN。現在是時候為優化器設置一個使用度量的給定損失函數。然後,我們可以使用火車數據擬合模型。我們將使用以下代碼來完成這些任務:

您可以嘗試使用激活函數,損失函數,調參等等。但是,我可以說adam通常勝過其他激活函數。我不確定您是否可以更改多類分類的損失函數。請隨意在下面進行實驗和評論。這樣簡單的測可以達到98–99%的測試精度。由於MNIST數據集不需要大量的計算能力,因此您也可以輕鬆地嘗試好幾次訓練試試看。

評估模型

最後,您可以使用一行代碼通過x_test和y_test評估訓練後的模型:

model.evaluate(x_test, y_test)

對於一個如此簡單的模型,結果是相當不錯的。

評估顯示,測試儀的準確性為98.5%!

通過這種基本模型,我們達到了98.5%的準確性。坦率地說,在許多圖像分類案例中(例如,對於自動駕駛汽車),我們甚至不能容忍0.1%的誤差,因為作為類比,這就像在1000例案例中雖然導致1次事故但很嚴重一樣。但是,對於我們的第一個模型,這結果已經相當不錯了。


大魔王Hacker


推薦兩本書 《深度學習 基於keras的Python實踐》

本書教你如何構建和評估一個神經網絡模型。\r

• 如何使用更加先進的技術構建一個深度學習的模型。\r

• 如何構建一個圖像或文本相關的模型。\r

• 如何改善模型的性能。

《Python數據挖掘與機器學習實戰》

案例包括:·使用決策樹算法對鳶尾花數據集進行分類;

·使用隨機森林對葡萄酒數據集進行分類;

·SVM中採用三種核函數進行時間序列曲線預測;

·HMM模型用於中文分詞;

·用TensorFlow實現BP神經網絡;

·樸素貝葉斯分類器在破產預測中的應用。

·採用卷積神經網絡實現了雷達剖面圖識別實例;

·使用LSTM模型實現了一個聊天機器人的程序;

·通過DCGAN網絡來訓練數據,從而產生人臉圖像。




分享到:


相關文章: