在深度學習蓬勃發(fā)展的今天,越來越多的深度學習框架被提出來,谷歌的Tensorflow ,微軟的CNTK,等等。閱讀文獻時,如果我們想重現(xiàn)論文中的方法,但是又礙于沒有學習過論文中提到的深度學習框架,那么為了節(jié)約研究的時間,使用keras會是你的一個不錯選擇。keras是由純Python編寫的高級神經網(wǎng)絡API,它的后臺支持tensorflow,theano或者CNTK。利用keras,我們能很輕松的搭建深度學習模型。
雖然keras的官方文檔將已經把各部分講得很詳細,但是當真正使用keras搭建模型時,還是會遇到參數(shù)不知道如何設置的問題。接下來,我將會用MLP對mnist數(shù)據(jù)集進行分類的例子,對代碼進行講解,希望能給學習keras的同學帶來幫助。
MLP(多層神經網(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對象,有這行代碼,我們就可以開始自上而下的搭建神經網(wǎng)絡層。
2 Squentail類中,有add方法(類中函數(shù)的叫法),我們通過它添加各種神經網(wǎng)絡層,在這行代碼中,搭建的是Dense層也就是全連接層。Dense層中,有許多參數(shù),但是大部分都設定了默認值,所以只要關注一下units,activation,input_shape即可。具體來講解一下本行設置,units=512就是設置這一層的神經元的數(shù)量(這個數(shù)量的設置大家可以自己調節(jié)),activation='relu'就是設置激活函數(shù)為relu(當然還可以設置許多其他的激活函數(shù)),大家注意在搭建第一層神經網(wǎng)絡層的時候一定要添加input_shape,之后的網(wǎng)絡層不需要添加。
3 Dropout(0.2),Dropout層它的作用大家可以想象成生物神經元與神經元連線的斷裂,0.2就是有百分之20的概率兩個神經元之間失去聯(lián)系,用于處理數(shù)據(jù)過擬合的情況。
4 繼續(xù)搭建Dense層,這層有512個神經元,激活函數(shù)設為relu。大家可以看到,已經沒有添加input_shape,keras內部已經自動計算好了,不用我們操心。
5 繼續(xù)加Dropout層
6 最后一層,10個神經元用于判定手寫圖像的數(shù)字,激活函數(shù)為softmax。
7 這行是用來統(tǒ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為顯示。)
好,代碼已經講完了,最后我還想談一談我學習keras的小心得。
-
機器學習的基本原理還是需要搞懂的,不然你不知道該如何改進你的神經網(wǎng)絡模型。
-
深度學習的算法需要搞懂,不然你不知道該如何搭建模型。
-
要勇于嘗試,必須要把代碼跑起來,不能看看例子就算了,這樣永遠無法提高
-
多做總結,我覺得寫博客是一個做總結的好方法,既總結了知識點,又能幫助大家一起提高。
好吧,如果喜歡我寫的,歡迎大家點贊和評論,大家還要什么不懂的可以留言,我會在下次的博客中給大家講解。
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。