機械学習で画像分類

準備

download して解凍

実行

スタートメニュー → Anaconda3 → Anaconda promptを起動
(注意:“学生”ではなく“管理者”のフォルダで立ち上がります)

> cd ml

> python run.py

↓ 実行結果

:
:
Epoch 1494/1500
18/18 [==============================] - 0s 388us/step - loss: 4.0399e-06 - acc: 1.0000 - val_loss: 9.8348e-07 - val_acc: 1.0000
Epoch 1495/1500
18/18 [==============================] - 0s 332us/step - loss: 5.9077e-06 - acc: 1.0000 - val_loss: 9.5368e-07 - val_acc: 1.0000
Epoch 1496/1500
18/18 [==============================] - 0s 332us/step - loss: 7.6493e-07 - acc: 1.0000 - val_loss: 9.5368e-07 - val_acc: 1.0000
Epoch 1497/1500
18/18 [==============================] - 0s 332us/step - loss: 2.8975e-06 - acc: 1.0000 - val_loss: 9.2387e-07 - val_acc: 1.0000
Epoch 1498/1500
18/18 [==============================] - 0s 388us/step - loss: 1.9206e-07 - acc: 1.0000 - val_loss: 9.2387e-07 - val_acc: 1.0000
Epoch 1499/1500
18/18 [==============================] - 0s 388us/step - loss: 7.7818e-07 - acc: 1.0000 - val_loss: 8.9407e-07 - val_acc: 1.0000
Epoch 1500/1500
18/18 [==============================] - 0s 388us/step - loss: 8.3717e-06 - acc: 1.0000 - val_loss: 8.9407e-07 - val_acc: 1.0000
C:\ProgramData\Anaconda3\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
Using TensorFlow backend.
train.py:66: UserWarning: The `nb_epoch` argument in `fit` has been renamed `epochs`.
  model.fit(image_list, Y, nb_epoch=1500, batch_size=100, validation_split=0.1)
data/test/apple/a.jpg
label: 1 result: 1
data/test/apple/b.jpg
label: 1 result: 1
data/test/apple/c.jpg
label: 1 result: 0
data/test/others/cut.jpg
label: 0 result: 0
data/test/others/juice.jpg
label: 0 result: 0
data/test/others/orange.jpg
label: 0 result: 0
seikai:  83.33333333333334 %

結果について

まず、

:
:
Epoch 1494/1500
18/18 [==============================] - 0s 388us/step - loss: 4.0399e-06 - acc: 1.0000 - val_loss: 9.8348e-07 - val_acc: 1.0000
Epoch 1495/1500
18/18 [==============================] - 0s 332us/step - loss: 5.9077e-06 - acc: 1.0000 - val_loss: 9.5368e-07 - val_acc: 1.0000
Epoch 1496/1500
18/18 [==============================] - 0s 332us/step - loss: 7.6493e-07 - acc: 1.0000 - val_loss: 9.5368e-07 - val_acc: 1.0000
Epoch 1497/1500
18/18 [==============================] - 0s 332us/step - loss: 2.8975e-06 - acc: 1.0000 - val_loss: 9.2387e-07 - val_acc: 1.0000
Epoch 1498/1500
18/18 [==============================] - 0s 388us/step - loss: 1.9206e-07 - acc: 1.0000 - val_loss: 9.2387e-07 - val_acc: 1.0000
Epoch 1499/1500
18/18 [==============================] - 0s 388us/step - loss: 7.7818e-07 - acc: 1.0000 - val_loss: 8.9407e-07 - val_acc: 1.0000
Epoch 1500/1500
18/18 [==============================] - 0s 388us/step - loss: 8.3717e-06 - acc: 1.0000 - val_loss: 8.9407e-07 - val_acc: 1.0

ここまでが学習です。/data/trainの下の画像で学習しています。
そして最後の方の、

data/test/apple/a.jpg
label: 1 result: 1
data/test/apple/b.jpg
label: 1 result: 1
data/test/apple/c.jpg
label: 1 result: 0
data/test/others/cut.jpg
label: 0 result: 0
data/test/others/juice.jpg
label: 0 result: 0
data/test/others/orange.jpg
label: 0 result: 0
seikai:  83.33333333333334 %

/data/testの下の画像を使ってテストをした結果です。
/apple/a.jpg/apple/b.jpgは正しくリンゴと判定result: 1されてますが、/apple/c.jpgは間違ってその他と判定result: 0されてしまっています。

課題1: /data/test/apple/c.jpg も正しく判定されるように、学習に使う/data/train/appleの画像を充実させてください

ただし、c.jpgそのものを/trainの下に置くのは反則とします

課題2: 以下のキーワードをネットで検索し、少しでも理解しましょう

機械学習 (machine learning) / 深層学習 (deep learning) / Tensorflow / Keras