在深度學習蓬勃發(fā)展的今天双藕,越來越多的深度學習框架被提出來止状,谷歌的Tensorflow ,微軟的CNTK烹棉,等等。閱讀文獻時怯疤,如果我們想重現(xiàn)論文中的方法,但是又礙于沒有學習過論文中提到的深度學習框架,那么為了節(jié)約研究的時間铅匹,使用keras會是你的一個不錯選擇评矩。keras是由純Python編寫的高級神經(jīng)網(wǎng)絡API,它的后臺支持tensorflow塔淤,theano或者CNTK摘昌。利用keras,我們能很輕松的搭建深度學習模型高蜂。
雖然keras的官方文檔將已經(jīng)把各部分講得很詳細聪黎,但是當真正使用keras搭建模型時,還是會遇到參數(shù)不知道如何設置的問題备恤。接下來稿饰,我將會用MLP對mnist數(shù)據(jù)集進行分類的例子,對代碼進行講解烘跺,希望能給學習keras的同學帶來幫助湘纵。
MLP(多層神經(jīng)網(wǎng)絡)
1 model = Sequential() #在代碼中注釋不利于讀者閱讀,所以我統(tǒng)一在代碼后面講解
2 model.add(Dense(512, activation='relu', input_shape=(784,)))
3 model.add(Dropout(0.2))
4 model.add(Dense(512, activation='relu'))
5 model.add(Dropout(0.2))
6 model.add(Dense(10, activation='softmax'))
7 model.summary()
8 model.compile(loss='categorical_crossentropy',
optimizer=RMSprop(),
metrics=['accuracy'])
9 history = model.fit(x_train, y_train,
batch_size=128,
epochs=20,
validation_split=0.2)
10 score = model.evaluate(x_test, y_test, verbose=0)
1 在keras源代碼中滤淳,Sequential其實是個類梧喷,model=Sequntial() ,就是定義了一個Squntial對象,有這行代碼,我們就可以開始自上而下的搭建神經(jīng)網(wǎng)絡層铺敌。
2 Squentail類中汇歹,有add方法(類中函數(shù)的叫法),我們通過它添加各種神經(jīng)網(wǎng)絡層偿凭,在這行代碼中产弹,搭建的是Dense層也就是全連接層。Dense層中弯囊,有許多參數(shù)痰哨,但是大部分都設定了默認值,所以只要關注一下units匾嘱,activation斤斧,input_shape即可。具體來講解一下本行設置霎烙,units=512就是設置這一層的神經(jīng)元的數(shù)量(這個數(shù)量的設置大家可以自己調(diào)節(jié))撬讽,activation='relu'就是設置激活函數(shù)為relu(當然還可以設置許多其他的激活函數(shù)),大家注意在搭建第一層神經(jīng)網(wǎng)絡層的時候一定要添加input_shape悬垃,之后的網(wǎng)絡層不需要添加游昼。
3 Dropout(0.2),Dropout層它的作用大家可以想象成生物神經(jīng)元與神經(jīng)元連線的斷裂尝蠕,0.2就是有百分之20的概率兩個神經(jīng)元之間失去聯(lián)系烘豌,用于處理數(shù)據(jù)過擬合的情況。
4 繼續(xù)搭建Dense層趟佃,這層有512個神經(jīng)元扇谣,激活函數(shù)設為relu。大家可以看到闲昭,已經(jīng)沒有添加input_shape罐寨,keras內(nèi)部已經(jīng)自動計算好了,不用我們操心序矩。
5 繼續(xù)加Dropout層
6 最后一層鸯绿,10個神經(jīng)元用于判定手寫圖像的數(shù)字,激活函數(shù)為softmax簸淀。
7 這行是用來統(tǒng)計我們搭建的神經(jīng)網(wǎng)絡模型的相關參數(shù)瓶蝴。當我們在運行程序的時候,會在編譯器上顯示租幕,大家可以試一試舷手。
8 compile(編譯),設置損失函數(shù)loss劲绪,這里設置的是交叉熵男窟;設置優(yōu)化算法optmimizer盆赤,這里設置的是RMSprop;設置性能評估m(xù)etrics歉眷,通常設置為accuracy牺六。
9 前面的代碼相當于把水管搭好了,現(xiàn)在開始通水汗捡,fit函數(shù)里面需要設置的參數(shù)有:input data (輸入數(shù)據(jù))淑际;lables (輸入數(shù)據(jù)標簽);batch_size(做一次梯度下降所使用的數(shù)據(jù)量) 扇住;epochs(使用總訓練集的次數(shù))春缕;validation_split(抽取訓練集0至1比例的數(shù)據(jù)作為驗證集,這里推薦設置為0.2)
10 評估函數(shù)艘蹋,加入測試集即可淡溯。(verbose是用來顯示記錄的,0為不顯示簿训,1為顯示。)
好米间,代碼已經(jīng)講完了强品,最后我還想談一談我學習keras的小心得。
-
機器學習的基本原理還是需要搞懂的屈糊,不然你不知道該如何改進你的神經(jīng)網(wǎng)絡模型的榛。
-
深度學習的算法需要搞懂,不然你不知道該如何搭建模型逻锐。
-
要勇于嘗試夫晌,必須要把代碼跑起來,不能看看例子就算了昧诱,這樣永遠無法提高
-
多做總結晓淀,我覺得寫博客是一個做總結的好方法,既總結了知識點盏档,又能幫助大家一起提高凶掰。
好吧,如果喜歡我寫的蜈亩,歡迎大家點贊和評論懦窘,大家還要什么不懂的可以留言,我會在下次的博客中給大家講解稚配。
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者