
TensorFlow 2.0 Alpha に掲載されているファッション関連商品の画像データを利用してニューラルネットワークのプログラムを動かしてみました。
# tensorflowをKerasでモデル定義して使用 import tensorflow from tensorflow import keras import numpy as np # jpupyter使用の場合 %matplotlib inline import matplotlib.pyplot as plt batch_size = 128 num_class = 10 epochs = 20
訓練データとテストデータの読み込み
(訓練データ 60,000件)
(テストデータ 10,000件)
(x_train, y_train), (x_test, y_test) = keras.datasets.fashion_mnist.load_data()
最初の10件の訓練データを表示
for i in range(10):
plt.subplot(2, 5, i+1)
plt.title("Label: " + str(i))
plt.imshow(x_train[i].reshape(28,28), cmap=None)
Kerasを使用してTensorflowのモデル作成 (Kerasがあれば、かなり簡単に記述できます。)
x_train, x_test = x_train / 255.0, x_test / 255.0
for i in range(10):
plt.subplot(2, 5, i+1)
plt.title("Label: " + str(i))
plt.imshow(x_train[i].reshape(28,28), cmap=None)
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])学習を10回実施
history = model.fit(x_train, y_train, epochs=10)
[実行結果]
Epoch 1/10 60000/60000 [==============================] - 28s 465us/sample - loss: 0.5005 - acc: 0.8211 Epoch 2/10 60000/60000 [==============================] - 32s 534us/sample - loss: 0.3858 - acc: 0.8590 - loss: 0.3875 Epoch 3/10 60000/60000 [==============================] - 33s 554us/sample - loss: 0.3529 - acc: 0.8703 - loss: 0.3527 - acc: 0 Epoch 4/10 60000/60000 [==============================] - 32s 534us/sample - loss: 0.3292 - acc: 0.8772 - loss: 0.3290 - acc: 0 - ETA: 0s - loss: 0.3292 Epoch 5/10 60000/60000 [==============================] - 34s 561us/sample - loss: 0.3139 - acc: 0.8832 Epoch 6/10 60000/60000 [==============================] - 37s 615us/sample - loss: 0.3024 - acc: 0.8876 Epoch 7/10 60000/60000 [==============================] - 34s 561us/sample - loss: 0.2909 - acc: 0.8919 Epoch 8/10 60000/60000 [==============================] - 39s 653us/sample - loss: 0.2825 - acc: 0.8948 Epoch 9/10 60000/60000 [==============================] - 39s 644us/sample - loss: 0.2719 - acc: 0.8984 Epoch 10/10 60000/60000 [==============================] - 33s 544us/sample - loss: 0.2635 - acc: 0.9017
正解率の測定
model.evaluate(x_test, y_test)
[実行結果]
10000/10000 [==============================] - 1s 107us/sample - loss: 0.3313 - acc: 0.8849
正解率は88%程度で改善の余地がありそうです。 28×28ピクセルの小さな画像データですが、さすがに60,000件のデータに対して10回の訓練を行うと、私のパソコンでは10分ほど時間が必要でした。 ニューラルネットワークのプログラム学習には高速演算を行えるGPU搭載のパソコンがあれば快適でしょう。
学習精度は88%となりましたが、テストデータの最初の10件の正解率を確認してみます。
# テストデータの最初の10件の画像を表示
for i in range(10):
plt.subplot(1, 10, i+1)
plt.title(str(i))
plt.imshow(x_test[i].reshape(28,28), cmap=None)
for i in range(10):
pr = model.predict(x_test[i:i+1])
print (np.argmax(pr))[実行結果] (ラベルのみ出力)
9 2 1 1 6 1 4 6 5 7
このファッションデータのラベルは以下のようになっていますので、 最初の10個のデータは全問正解でした。
| ラベル | クラス |
| 0 | T-シャツ/トップ (T-shirt/top) |
| 1 | ズボン (Trouser) |
| 2 | プルオーバー (Pullover) |
| 3 | ドレス (Dress) |
| 4 | コート (Coat) |
| 5 | サンダル (Sandal) |
| 6 | シャツ (Shirt) |
| 7 | スニーカー (Sneaker) |
| 8 | バッグ (Bag) |
| 9 | アンクルブーツ (Ankle boot) |






