【火爐煉AI】深度學習002-構(gòu)建并訓練單層神經(jīng)網(wǎng)絡(luò)模型
(本文所使用的Python庫和版本號: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )
前面我們介紹了神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)單元-感知器虫腋,現(xiàn)在我們再升一級士葫,看看神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)和訓練方法。
1. 單層神經(jīng)網(wǎng)絡(luò)
單層神經(jīng)網(wǎng)絡(luò)由一個層次中的多個神經(jīng)元組成始藕,總體來看尚辑,單層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)是:一個輸入層贱勃,一個隱含層刚操,一個輸出層。如下為結(jié)構(gòu)示意圖伶椿。
圖中描述的是前向網(wǎng)絡(luò)撬讽,但其反向傳播網(wǎng)絡(luò)的結(jié)構(gòu)也是一樣的。藍色方框表示輸入層悬垃,綠色圓圈表示隱含層游昼,輸出層沒有繪制出來。圖片來源于2017/7/20 朱興全教授學術(shù)講座觀點與總結(jié)第二講:單個神經(jīng)元/單層神經(jīng)網(wǎng)絡(luò)尝蠕。
也可以從下圖中看出單層神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu):
那么從代碼上怎么創(chuàng)建單層神經(jīng)網(wǎng)絡(luò)烘豌,并對其進行訓練呢?
1.1 加載數(shù)據(jù)集
首先我們加載數(shù)據(jù)集看彼,該數(shù)據(jù)集很簡單廊佩,包含16行,四列靖榕,前兩列是double型數(shù)據(jù)标锄,構(gòu)成了特征列,后兩列是整數(shù)(0或1)茁计,構(gòu)成了標簽列料皇。加載方式很簡單,前面講過多次,此處只把該數(shù)據(jù)集中特征列的分布情況繪制出來践剂。如下
1.2 建立模型并訓練
數(shù)據(jù)集準備完成后鬼譬, 就需要構(gòu)建單層神經(jīng)網(wǎng)絡(luò)模型,并對其進行訓練逊脯。
# 構(gòu)建單層NN模型优质,該模型的隱含層含有兩個感知器
import neurolab as nl
x_min, x_max = dataset_X[:,0].min(), dataset_X[:,0].max()
y_min, y_max = dataset_X[:,1].min(), dataset_X[:,1].max()
single_layer_net = nl.net.newp([[x_min, x_max], [y_min, y_max]], 2) # 隱含層含有兩個神經(jīng)元
# 所以本單層NN模型含有兩個輸入神經(jīng)元,兩個隱含層神經(jīng)元军洼,兩個輸出神經(jīng)元
cost = single_layer_net.train(dataset_X, dataset_y, epochs=50, show=2, lr=0.01)
# 訓練該單層NN模型巩螃,50個回合,每2個回合顯示一下訓練結(jié)果匕争,學習速率為0.01
-------------------------------------輸---------出--------------------------------
Epoch: 2; Error: 7.5;
Epoch: 4; Error: 7.0;
Epoch: 6; Error: 4.0;
Epoch: 8; Error: 4.0;
Epoch: 10; Error: 4.0;
Epoch: 12; Error: 4.0;
Epoch: 14; Error: 4.0;
Epoch: 16; Error: 4.0;
Epoch: 18; Error: 4.0;
Epoch: 20; Error: 4.0;
Epoch: 22; Error: 4.0;
Epoch: 24; Error: 4.0;
Epoch: 26; Error: 4.0;
Epoch: 28; Error: 4.0;
Epoch: 30; Error: 4.0;
Epoch: 32; Error: 4.0;
Epoch: 34; Error: 4.0;
Epoch: 36; Error: 4.0;
Epoch: 38; Error: 4.0;
Epoch: 40; Error: 4.0;
Epoch: 42; Error: 4.0;
Epoch: 44; Error: 4.0;
Epoch: 46; Error: 4.0;
Epoch: 48; Error: 4.0;
Epoch: 50; Error: 4.0;
The maximum number of train epochs is reached
--------------------------------------------完-------------------------------------
可以看出在第6個回合時避乏,cost就達到最低,并不再變化汗捡,表示已經(jīng)收斂淑际,再提高訓練回合數(shù)也用處不大畏纲。將Error變化圖繪制出來可以得到:
1.3 使用訓練好的模型來預測新樣本
訓練后的模型肯定是要用它來預測新樣本扇住,期望它能對從來沒有見過的新樣本也能得到理想的結(jié)果。
預測的代碼為:
# 用訓練好的模型來預測新樣本
new_samples=np.array([[0.3, 4.5],
[4.5, 0.5],
[4.3, 8]])
print(single_layer_net.sim(new_samples))
-------------------------------------輸---------出--------------------------------
[[0. 0.]
[1. 0.]
[1. 1.]]
--------------------------------------------完-------------------------------------
單單從結(jié)果上來看盗胀,我們成功的構(gòu)建了單層NN模型并對其進行訓練艘蹋,通過訓練后的模型來成功預測了新樣本,一般的票灰,一個深度學習模型流程就是這樣的女阀。
單層神經(jīng)網(wǎng)絡(luò)模型雖然結(jié)構(gòu)簡單,訓練很快屑迂,比較適合一些簡單問題浸策,對于復雜一些的問題,這個模型就會力不從心惹盼,并且庸汗,有時我們的優(yōu)化方法并不一定能夠找到所希望的優(yōu)化參數(shù),也找不到所需要的擬合函數(shù)手报,由于模型比較簡單蚯舱,難以學習到復雜的內(nèi)在機理,很容易產(chǎn)生欠擬合掩蛤。
########################小**********結(jié)###############################
1枉昏,單層神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)簡單,訓練耗時短揍鸟,能夠解決的問題也相對比較簡單兄裂,對于比較復雜的問題會出現(xiàn)欠擬合,故而應(yīng)用上受到一定限制,目前直接使用單層神經(jīng)網(wǎng)絡(luò)模型的情況非常少懦窘。
#################################################################
注:本部分代碼已經(jīng)全部上傳到(我的github)上前翎,歡迎下載。
參考資料:
1, Python機器學習經(jīng)典實例畅涂,Prateek Joshi著港华,陶俊杰,陳小莉譯