ディープラーニングで画像認識 実装(3)、keras で、CIFAR-10データの学習
index:
概要
前回は、自前で準備した画像の
keras で画像認識の学習、評価、を行いました。
mnist以外のデータで、CIFAR-10データ を試してみたいと思います
環境
keras : 2.1.3
tensorflow : 1.4
python : 3.5.2
画像データ
kerasの場合、cifar10関連の処理を読み込むと、
カンタンに、学習用データとしてロード可能でした。
下記の import
from keras.datasets import cifar10
50000 枚が学習用、残り 10000 枚が評価用
画素数 32x32 で RGB
・画像が小さく、画素数が少ない為。
種類によっては、人が見てもよく判別できない物もありそうです
・種類は、10種類で下記内容
airplane; 飛行機
automobile; 自動車
bird; 鳥
cat; 猫
deer; 鹿
dog; 犬
frog; 蛙
horse; 馬
ship; 船, 舟
truck; 大型トラック
コード
https://github.com/kuc-arc-f/img_CIFAR
・今回は、開発PCで処理時間が長くなりそうで、
google colabで、学習処理を行いました。
train_colab.py
・ データのロード
if __name__ == '__main__': #cifar10をダウンロード (x_train,y_train),(x_test,y_test)=cifar10.load_data() # print(x_train.shape, y_train.shape ) print(x_test.shape , y_test.shape ) #画像を0-1の範囲で正規化 x_train=x_train.astype('float32')/255.0 x_test=x_test.astype('float32')/255.0 #正解ラベルをOne-Hot表現に変換 y_train=np_utils.to_categorical(y_train,10) y_test=np_utils.to_categorical(y_test,10)
・学習の処理
batch_size=32 epoch_num=10 #fit history=model.fit(x_train,y_train ,batch_size=batch_size ,nb_epoch=epoch_num ,verbose=1,validation_split=0.1)
・ 実行ログ
Using TensorFlow backend. ((50000, 32, 32, 3), (50000, 1)) ((10000, 32, 32, 3), (10000, 1)) /usr/local/lib/python2.7/dist-packages/ipykernel_launcher.py:62: UserWarning: The `nb_epoch` argument in `fit` has been renamed `epochs`. Train on 45000 samples, validate on 5000 samples Epoch 1/10 45000/45000 [==============================] - 26s 578us/step - loss: 1.4947 - acc: 0.4553 - val_loss: 1.0340 - val_acc: 0.6320 Epoch 2/10 45000/45000 [==============================] - 22s 490us/step - loss: 1.0413 - acc: 0.6291 - val_loss: 0.8798 - val_acc: 0.6878 Epoch 3/10 45000/45000 [==============================] - 22s 495us/step - loss: 0.8964 - acc: 0.6855 - val_loss: 0.7888 - val_acc: 0.7224 Epoch 4/10 45000/45000 [==============================] - 22s 492us/step - loss: 0.8000 - acc: 0.7178 - val_loss: 0.7154 - val_acc: 0.7528 Epoch 5/10 45000/45000 [==============================] - 22s 489us/step - loss: 0.7319 - acc: 0.7452 - val_loss: 0.6705 - val_acc: 0.7704 Epoch 6/10 45000/45000 [==============================] - 22s 494us/step - loss: 0.6809 - acc: 0.7605 - val_loss: 0.6391 - val_acc: 0.7810 Epoch 7/10 45000/45000 [==============================] - 22s 490us/step - loss: 0.6376 - acc: 0.7781 - val_loss: 0.6564 - val_acc: 0.7762 Epoch 8/10 45000/45000 [==============================] - 22s 490us/step - loss: 0.6069 - acc: 0.7881 - val_loss: 0.6671 - val_acc: 0.7802 Epoch 9/10 45000/45000 [==============================] - 22s 496us/step - loss: 0.5759 - acc: 0.7948 - val_loss: 0.6474 - val_acc: 0.7846 Epoch 10/10 45000/45000 [==============================] - 22s 489us/step - loss: 0.5380 - acc: 0.8104 - val_loss: 0.6407 - val_acc: 0.7904 ('Test loss:', 0.6536725306987763) ('Test acc:', 0.7773)
評価の、正解率は、 約77%で、いまいちな結果に。
エポック数は、10で少なめです。(GPUでも、数分かかりましたが。)
精度をあげるには、エポック数を増やしたり、
他の、パラメータ変更の必用がありそうですが
試行錯誤したいと思います。
・保存済みの学習ファイル、モデルのロードと、
評価の処理
predict.py
=> 学習時に、保存したファイルをロード、その後に、評価
model_file = "cifar10_cnn.json" with open(model_file, 'r') as fp: model = model_from_json(fp.read()) model.load_weights("cifar10_cnn.h5") model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy']) # model.summary() # モデルの評価 loss, acc = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', loss) print('Test acc:', acc)
関連
KerasでCIFAR-10の一般物体認識
http://aidiary.hatenablog.com/entry/20161127/1480240182
http://kikei.github.io/ai/2018/03/25/cifer10-cnn1.html
cifar10とKerasを使ってCNN(Convolutional Neural Network)を実装してみる
https://qiita.com/God_KonaBanana/items/10fa8bb58cdd1dbd2e59