次に,認識結果,正解ラベルと画像のイメージも表示してみよう.
認識させる (09-predict-train.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)
# 認識してみよう
pred_train = model.predict(x_train)
# idx 番目のトレーニングデータに対する予測結果の表示
idx = 0 ## この数値を適当に変化させると良い
print(pred_train[idx])
# 認識結果と正解を表示する
print('認識結果 :', np.argmax(pred_train[idx]))
print('正解ラベル:', np.argmax(y_train[idx]))
# トレーニングデータの表示
i = 1
for x in x_train[idx]:
if (x == 1):
print("+ ", end="")
else:
print(" ", end="")
if i % 15 == 0:
print("")
i += 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.4606 - accuracy: 0.0625 Epoch 2/30 80/80 [==============================] - 0s 87us/step - loss: 1.9235 - accuracy: 0.4000 ...(中略)... Epoch 30/30 80/80 [==============================] - 0s 100us/step - loss: 0.0362 - accuracy: 1.0000 [1.3970063e-03 9.6370350e-05 3.7483984e-04 9.9095517e-01 5.4313241e-06 3.3453954e-04 7.9006958e-04 3.6164123e-04 3.2121353e-03 2.4727897e-03] 認識結果 : 3 正解ラベル: 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
正しく認識できていることが確認できました.次は,他の数字の認識結果も自由に表示できるように改良してみよう.なお,データの作成時に並び順をランダムにシャッフルしているので,表示されるデータは必ずしも一致しません.