0%

第一次使用Keras就上手

最近正在學習Andrea在Coursera上開的Deep Learning課程,之前工作關係有接觸到keras,而且使用起來還滿容易上手的,所以就嘗試拿了MNIST資料集來試玩看看

首先載入手寫辨識資料集mnist,這個資料集還滿廣泛被拿來使用的,而且在keras也可以直接載入,另外也會用到最基本的keras Sequential model。

1
2
3
4
from keras.datasets 
import mnistfrom keras.models
import Sequentialfrom keras.layers
import Denseimport numpy as np
1
2
model = Sequential()
(x_train, y_train), (x_test, y_test) = mnist.load_data()

再來直接宣告一個sequential模型,並載入訓練和測試資料集

1
2
3
4
5
x_train = np.reshape(x_train, (x_train.shape[0], -1))/255
x_test = np.reshape(x_test, (x_test.shape[0], -1))/255

y_train = np.eye(10)[y_train.reshape(-1)]
y_test = np.eye(10)[y_test.reshape(-1)]

接著要先處理一下載入的資料,在x資料的部份要先將原本28×28的維度轉成1×784輸入,這裡可以使用numpy的reshape來處理,再來再將資料除上255作正規化。另外在label y資料集的部份則要作one-hot encoding,將每個標籤轉成長度為10的向量,並用0和1來表示屬於哪一個類別。

1
2
3
4
5
6
7
8
>>> x_train.shape
(60000, 784)
>>> x_test.shape
(60000, 10)
>>> y_train.shape
(10000, 784)
>>> y_test.shape
(10000, 10)

可以看到處理完後的資料維度

1
2
model.add(Dense(units=256, activation='relu', input_dim=28*28))
model.add(Dense(units=10, activation='softmax'))

再來加入兩個layer,即只使用一個hidden layer和一個output layer,其中hidden layer有256顆神經元,output layer有10顆,並透過softmax輸出結果

1
2
3
model.compile(loss='categorical_crossentropy',
optimizer='Adam',
metrics=['accuracy'])

接著開始設定使用什麼loss function與最佳化的方法,還有要評估模型的指標

1
model.fit(x_train, y_train, epochs=10, batch_size=32)

接著就開始訓練,其中會設定訓練的週期與每一次的批數

1
2
3
4
5
6
>>> loss_and_metrics = model.evaluate(x_train, y_train, batch_size=128)
>>> print(loss_and_metrics)
loss=0.007, acc=0.998
>>> loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
>>> print(loss_and_metrics)
loss=0.08, acc=0.979

中間可以看到訓練的過程,在訓練完畢說可以透過evaluate來評估model在訓練資料集,還有測試資料集的正確率。

keras在建立模型非常方便使用,可以很容易的加入需要的hidden layer數,而且針對常使用的activation function, loss function和最佳化的方法都有支援,如果需要快速的建出模型來作應用非常的推薦。另外keras也有支援CNN還有RNN,下次會用別的資料來試試看囉!

參考資料:
Keras Getting Start