ディープラーニングで画像認識 実装(4)、keras CNNで、自前準備した画像の学習(2)
index:
概要
前回は、自前で準備した画像で、ImageDataGenerator flow_from_directory()
を使用して、学習用/ 評価用データを準備しましたが。
評価時の、正解率などが。よく把握できなかったので
画像読み込み処理を含めて、全面的に再作成しました。
今回も、画像データの学習に時間がかかったので
google colabを、使用させて頂きました。(作業pcと比較して、かなり高速でした)
環境
keras : 2.1.3
tensorflow : 1.4
python : 3.5.2
画像データ
フォルダ構成は、前回と同じ
data フォルダ下に配置
train : 学習用
validation : 検証用
を作成し、
各フォルダの下に、
各クラス単位のフォルダ、その下に、学習用の画像を配置
・前処理は、前回と同じ手法で
train 下に、水増し画像を多目に作成しておきます。
C:\tmp\2017_tmp\python35\tensorflow\img_data_test>tree data
フォルダー パスの一覧: ボリューム Acer
ボリューム シリアル番号は 7221-E6BF です
C:\TMP\2017_TMP\PYTHON35\TENSORFLOW\IMG_DATA_TEST\DATA
├─train
│ ├─bird
│ ├─cat
│ ├─dog
│ └─flower
└─validation
├─bird
├─cat
├─dog
└─flower
コード
https://github.com/kuc-arc-f/img_data_test2
・img_loader.py
data/train , validation の下層
のフォルダを、クラスとして生成し、
画像データは、numpy arrayに変換します。
・train.py
keras のNN で学習、
モデルで、ニューロン数は
入力: 128 * 128 * 3
隠れ層: 64
出力層: クラスの数
・エポック数は,30~40 で、
正解率は、95%以上まで上昇できました。
#モデルを構築 model=Sequential() model.add(Conv2D(32,(3,3),padding='same',input_shape=(128, 128,3))) model.add(Activation('relu')) model.add(Conv2D(32,(3,3),padding='same')) model.add(Activation('relu')) model.add(MaxPool2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Conv2D(64,(3,3),padding='same')) model.add(Activation('relu')) model.add(Conv2D(64,(3,3),padding='same')) model.add(Activation('relu')) model.add(MaxPool2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense( num_classes ,activation='softmax')) model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy']) batch_size=32 epoch_num=20 #fit history=model.fit(x_train,y_train ,batch_size=batch_size ,nb_epoch=epoch_num ,verbose=1,validation_split=0.1)
・評価
predict.py
# モデルの評価 loss, acc = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', loss) print('Test acc:', acc) print("#end_acc")
実行ログ
・学習、エポック=30
((264, 128, 128, 3), (264,)) ((24, 128, 128, 3), (24,)) dog 24 /usr/local/lib/python2.7/dist-packages/ipykernel_launcher.py:70: UserWarning: The `nb_epoch` argument in `fit` has been renamed `epochs`. Train on 237 samples, validate on 27 samples Epoch 1/30 237/237 [==============================] - 3s 12ms/step - loss: 2.4715 - acc: 0.3291 - val_loss: 1.7619 - val_acc: 0.0000e+00 Epoch 2/30 237/237 [==============================] - 1s 4ms/step - loss: 1.2486 - acc: 0.4177 - val_loss: 1.3408 - val_acc: 0.0000e+00 Epoch 3/30 237/237 [==============================] - 1s 4ms/step - loss: 1.0142 - acc: 0.4852 - val_loss: 1.6289 - val_acc: 0.0741 Epoch 4/30 237/237 [==============================] - 1s 4ms/step - loss: 0.7425 - acc: 0.6667 - val_loss: 1.0257 - val_acc: 0.3333 Epoch 5/30 237/237 [==============================] - 1s 4ms/step - loss: 0.4779 - acc: 0.8354 - val_loss: 1.0483 - val_acc: 0.4815 Epoch 6/30 237/237 [==============================] - 1s 4ms/step - loss: 0.2758 - acc: 0.8945 - val_loss: 0.8937 - val_acc: 0.7037 Epoch 7/30 237/237 [==============================] - 1s 4ms/step - loss: 0.3764 - acc: 0.8354 - val_loss: 0.4036 - val_acc: 0.8519 Epoch 8/30 237/237 [==============================] - 1s 4ms/step - loss: 0.2776 - acc: 0.8903 - val_loss: 0.4373 - val_acc: 0.7778 Epoch 9/30 237/237 [==============================] - 1s 4ms/step - loss: 0.2141 - acc: 0.9367 - val_loss: 0.5481 - val_acc: 0.8148 Epoch 10/30 237/237 [==============================] - 1s 4ms/step - loss: 0.2487 - acc: 0.8987 - val_loss: 0.6807 - val_acc: 0.7778 Epoch 11/30 237/237 [==============================] - 1s 4ms/step - loss: 0.2253 - acc: 0.9030 - val_loss: 0.4038 - val_acc: 0.8148 Epoch 12/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0826 - acc: 0.9831 - val_loss: 0.8256 - val_acc: 0.7407 Epoch 13/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0598 - acc: 0.9747 - val_loss: 1.3040 - val_acc: 0.5556 Epoch 14/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0431 - acc: 0.9831 - val_loss: 0.6250 - val_acc: 0.7778 Epoch 15/30 237/237 [==============================] - 1s 4ms/step - loss: 0.3783 - acc: 0.8945 - val_loss: 2.8109 - val_acc: 0.1852 Epoch 16/30 237/237 [==============================] - 1s 4ms/step - loss: 0.3372 - acc: 0.9030 - val_loss: 0.4436 - val_acc: 0.8889 Epoch 17/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0945 - acc: 1.0000 - val_loss: 0.9048 - val_acc: 0.6296 Epoch 18/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0356 - acc: 0.9958 - val_loss: 0.5516 - val_acc: 0.7407 Epoch 19/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0263 - acc: 0.9916 - val_loss: 0.3969 - val_acc: 0.8148 Epoch 20/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0127 - acc: 0.9958 - val_loss: 0.5036 - val_acc: 0.8148 Epoch 21/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0073 - acc: 0.9958 - val_loss: 0.5929 - val_acc: 0.8148 Epoch 22/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0123 - acc: 0.9958 - val_loss: 0.5014 - val_acc: 0.8519 Epoch 23/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0783 - acc: 0.9958 - val_loss: 0.3049 - val_acc: 0.8889 Epoch 24/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0062 - acc: 1.0000 - val_loss: 0.7293 - val_acc: 0.8519 Epoch 25/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0058 - acc: 1.0000 - val_loss: 0.6191 - val_acc: 0.8148 Epoch 26/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0049 - acc: 1.0000 - val_loss: 0.4268 - val_acc: 0.8519 Epoch 27/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0056 - acc: 1.0000 - val_loss: 0.3985 - val_acc: 0.8889 Epoch 28/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0011 - acc: 1.0000 - val_loss: 0.5152 - val_acc: 0.8889 Epoch 29/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0714 - acc: 0.9958 - val_loss: 0.6255 - val_acc: 0.8519 Epoch 30/30 237/237 [==============================] - 1s 4ms/step - loss: 0.0013 - acc: 1.0000 - val_loss: 0.7043 - val_acc: 0.7778
・評価
正解: 約 95.83%
('Test loss:', 0.04905049502849579) ('Test acc:', 0.9583333134651184)