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]).