keras的example資料夾中有很多例程,學習mnist_mlp.py例程
該例程實現功能為,從mnist資料集獲取60000個訓練樣本和10000個測試樣本,樣本為0-9十個數字,用全連線神經網路進行訓練,並測試結果。
例程採用60000個資料樣本進行訓練,對於一般的電腦來說,這樣訓練會比較費時間,學習測試較慢
所以,可以加入以下幾行**:
# mnist has 60000 datas,down to 6000 to accelerate
x_train=x_train[:6000]
y_train=y_train[:6000]
將原始60000個樣本只取前6000個樣本進行訓練
例程的核心**為(部分數值有修改):
model = sequential()
model.add(dense(512, activation='relu', input_shape=(784,)))
model.add(dropout(0.2))
model.add(dense(64, activation='relu'))
model.add(dropout(0.2))
model.add(dense(num_classes, activation='softmax'))
依次講解:
model.add(dense(512, activation='relu', input_shape=(784,)))
為model新增dense層,即全鏈結層,該層有784維輸入,512為輸出
model.add(dropout(0.2))
新增dropout層,訓練時概率性丟棄
model.add(dense(64, activation='relu'))
再次新增dense層,64維輸出(輸入為前一層,512維)
model.add(dense(num_classes, activation='softmax'))
再次新增dense層,10維輸出(num_classes=10,即0-9十個數字)
所以我們大致能夠知道,神經網路是輸入784維,第一層512維,第二層64維,輸出10維。
在例程末尾,可以新增兩句
model.summary()
print (model.get_weights())
即列印訓練出的model的概況和權值
程式執行結果如下:
測試準確率0.9515(這個準確率不重要,重要是理解程式和深度學習的原理)
下面我們能看到各層的引數概況,跟我們預想一致,784維輸入,第一層512維,第二層64維,第三層10維
第三列param是本層的引數數量
這裡有個問題還沒搞明白:
第一層784輸入,512輸出,引數個數應當是784×512=401408,但列印結果為401920=785×512
類似的,第二層引數個數32832=513×64
為什麼每層的引數數量是(輸入維度+1)×(輸出維度),這個+1是哪來的,求教。
Keras 神經網路構建學習
keras 是簡單易用 高效強大的神經網路庫,底層計算可基於 tensorflow 或 theano 平台實現。本篇將詳細介紹 keras 模型構建的具體步驟。通過閱讀本篇內容您將了解到 keras 模型構建的主要步驟 keras 神經網路搭建的一般過程 keras 模型構建主要包括5個步驟 定義 ...
卷積神經網路 Keras深度學習
全文引用 卷積神經網路之keras深度學習 卷積神經網路之優缺點 優點 共享卷積核,對高維資料處理無壓力 無需手動選取特徵,訓練好權重,即得特徵分類效果好 缺點 需要調參,需要大樣本量,訓練最好要gpu 物理含義不明確 也就說,我們並不知道沒個卷積層到底提取到的是什麼特徵,而且神經網路本身就是一種難...
神經網路的keras實現
keras是構建在tensorflow基礎上的python第三方庫,專門用於神經網路的構建與計算,同時還整合了scikit learn庫,使得可以在神經網路的構建中運用機器學習的方法。現在就用keras來構建之前構建過的神經網路。實現 首先匯入所需要的包 from keras.models impo...