keras教程【1】編寫多層感知機mlp

1.導包

keras.datasets: 包含多種常用數據集,實現自動下載和解析等;
keras.models:包含各種模型結構,1)順序模型Sequential;
keras.layers:包含常用的層結構,1)全連接層Dense;2)Dropout;3)Flatten;4)Conv2D;5)MaxPooling2D.
kears.optimizers:包含優化函數,1)adam;2)RMSprop.

2.數據輸入

mlp接收輸入數據格式:一維向量。
當數據格式不符合條件時,需要進行格式轉換,直接使用reshape即可。

3.特徵預處理。

1)是否歸一化。
比如將圖像數據需要經過x/255(即像素數據歸一化到0-1)。這樣處理的原因是:圖像的歸一化使得圖像可以抵抗幾何變換的攻擊,它能夠找出圖像中的那些不變量,從而得知這些圖像原本就是一樣的或者就是一個系列的。

歸一化的作用:
歸一化就是將有量綱的表達式,經過變換,變爲無量綱的表達式。其優點有 a. 避免具有不同無物理意義和量綱的輸入變量不能平等使用;b. 歸一化在sigmoid函數作爲激活函數時,可以防止輸入絕對值過大引起的神經元輸出飽和的現象;c.歸一化在神經網絡應用中,是爲了加快訓練網絡的收斂性;

4.標籤預處理.

1)分類標籤
label轉換爲one-hot標籤:可使用keras.utils.to_categorical.

y_train = keras.utils.to_categorical(y_train, 10).

2)迴歸標籤。
在迴歸問題中,當特徵數據進行歸一化的時候,label爲具體數值型,同樣可以對label數據進行歸一化處理。

5.構建模型結構。

假設我們現在構建一個順序結構的模型,包括2個隱藏層(採用relu激活函數),1個輸出層,且都是全連接層,構建完以後可以使用model.summary()來打印結構。

model = Sequential()
model.add(Dense(512, activation = ‘relu’, input_shape=(784,))).
model.add(Dropout(0.2)).
model.add(Dense(512, activation = ‘relu’)).
model.add(Dropout(0.2)).
model.add(Dense(10, activation = ‘softmax’)).

6.優化目標。

1)優化器:使用optimizer定義。
2)損失定義:分類問題中常用交叉熵categorical_crossentropy。迴歸問題中常用mse。
3) 指定在訓練及測試中關注的指標:設定metrics,一般地,設置metrics=[‘accuracy’].

model.compile(loss='categorical_crossentropy',  
              optimizer = RMSprop(),  
              metrics = ['accuracy']).   

7.開始訓練。

可以直接使用model.fit來進行訓練。其中,有幾個參數需要配置:
1)batch_size:表示每個epoch中訓練的樣本數量。
2)epochs:表示訓練的輪數(epochs).
3)verbose:表示以何種方式顯示輸出信息,0表示不輸出,1表示輸出全部日誌,2表示每個epoch輸出一次日誌。
4)validation_data: 可爲空(即不設置),表示驗證集。當該參數不爲空時,每個epoch過後就會輸出驗證集的loss和accuracy.

model.fit(x_train, y_train, batch_size = 64, 
          epochs = 2,
          verbose = 1,
          validation_data = (x_test, y_test))

8.測試結果。

使用model.evaluate測試時,輸出之前compile模型時指定的metrics類型,本例中是accuracy.

 score = model.evaluate(x_test, y_test, verbose=1)    
 print('Test loss:', score[0]).  
 print('Test accuracy',score[1]).  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章