学習データを使って,モデルの学習をしたので,テストデータでどの程度認識できるかを評価してみよう.モデルの評価は model.evaluate()
を呼び出すだけで可能です.次のコードでは評価結果が score
に格納されるので,その後適当な形式で表示すれば結果を確認できます.
モデルを評価する (07-evaluate.py)
import numpy as np
from keras.utils.np_utils import to_categorical
from keras.models import Sequential
from keras.layers import Dense
# ファイルを開いて読み込む
x_train = np.load('train_X_data.npy')
y_train = np.load('train_Y_data.npy')
x_test = np.load('test_X_data.npy')
y_test = np.load('test_Y_data.npy')
# 正解ラベルを one-hot-encoding にする
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
# モデルを作る
model = Sequential()
model.add(Dense(128, activation='relu', input_dim=225)) # input_dim = 15 x 15 = 225
model.add(Dense(10, activation='softmax'))
# モデルをコンパイルする
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.summary()
# 学習してみよう(このコードだけで,学習状況も表示される)
model.fit(x_train, y_train,
batch_size=20,
epochs=30,
verbose=1)
# モデルを評価する(テストデータを使う)
score = model.evaluate(x_test, y_test)
# 評価結果を表示する
print(score)
print(model.metrics_names)
print(model.metrics_names[0], " : ", score[0])
print(model.metrics_names[1], " : ", score[1])
Using TensorFlow backend.
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 128) 28928
_________________________________________________________________
dense_2 (Dense) (None, 10) 1290
=================================================================
Total params: 30,218
Trainable params: 30,218
Non-trainable params: 0
_________________________________________________________________
Epoch 1/30
80/80 [==============================] - 0s 1ms/step - loss: 2.4460 - accuracy: 0.1125
Epoch 2/30
80/80 [==============================] - 0s 62us/step - loss: 1.8151 - accuracy: 0.3875
...(中略)...
Epoch 30/30
80/80 [==============================] - 0s 112us/step - loss: 0.0287 - accuracy: 1.0000
20/20 [==============================] - 0s 997us/step
[0.7024205923080444, 0.75]
['loss', 'accuracy']
loss : 0.7024205923080444
accuracy : 0.75
テストデータに対しては 75% の精度で認識できたことがわかりました.なお,データの作成時に並び順をランダムにシャッフルしているので,結果は必ずしも一致しないことに注意してください.