こんにちは Keita_Nakamori(´・ω・`)です。
前回はTensor Flowにインプットするnpyデータを作成しました。
今回はTensorflowとKerasで畳み込みニューラルネットワークを構築して、訓練・評価してみます。
keras公式ページのSequential-model-guideを参考にします。
Contents
スクリプト:cnn_test.py
VGG-likeなconvnet を参考に動作を確認していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import numpy as np import tensorflow as tf import keras from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D, MaxPooling2D from keras.optimizers import SGD, Adam from keras.utils import np_utils # initialize parameters classes = ['car', 'motorbike'] # define 2 classses num_classes = len(classes) # the number of classes image_size = 150 # pixels of width or height # load npy file # need 'allow_pickle=True' X_train, X_test, y_train, y_test = np.load('./image_files.npy', allow_pickle=True) # one hot encording y_train = np_utils.to_categorical(y_train, num_classes) y_test = np_utils.to_categorical(y_test, num_classes) # define model model = Sequential() model.add(Conv2D(32,(3, 3), activation='relu', input_shape=(image_size, image_size, 3))) model.add(Conv2D(32,(3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) # 25%のデータは捨てる model.add(Flatten()) model.add(Dense(256, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(num_classes, activation='softmax')) # define optimiser opt = SGD(lr=0.01) # rmsprop, adam etc... model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy']) # trainning start history = model.fit(X_train, y_train, batch_size=32, epochs=30) # evaluation score = model.evaluate(X_test, y_test, batch_size=32) print() print('Test loss:', score[0]) print('Test accuracy:', score[1]) |
実行
では Anacondaプロンプトから $ conda info -e で仮想環境リストを確認して
1 2 3 4 5 |
(base) C:\Users\keita>conda info -e # conda environments: # base * C:\Users\keita\Anaconda3 djangoai C:\Users\keita\Anaconda3\envs\djangoai |
djangoaiが存在することを確認したら、$ conda activate djangoai して仮想環境に入ります。
1 2 3 |
(base) C:\Users\keita>conda activate djangoai (djangoai) C:\Users\keita> |
カレントディレクトリをcnn_test.pyがある場所まで移動して、実行します。
1 2 3 |
(djangoai) C:\Users\keita>cd anaconda_projects (djangoai) C:\Users\keita\anaconda_projects>cd djangoai (djangoai) C:\Users\keita\anaconda_projects\djangoai>python cnn_test.py |
結果
エポック数30回やった結果、精度はacc: 0.99まで向上しましたが、検証データではTest accuracy:0.81までしか出ていません。おそらく過学習になっていると思われます。まだまだ改善の余地ありです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Epoch 5/30 600/600 [==============================] - 13s 22ms/step - loss: 0.5880 - acc: 0.7017 Epoch 10/30 600/600 [==============================] - 13s 22ms/step - loss: 0.4863 - acc: 0.7850 Epoch 15/30 600/600 [==============================] - 14s 23ms/step - loss: 0.3483 - acc: 0.8617 Epoch 20/30 600/600 [==============================] - 13s 22ms/step - loss: 0.2374 - acc: 0.9150 Epoch 25/30 600/600 [==============================] - 13s 22ms/step - loss: 0.1508 - acc: 0.9633 600/600 [==============================] - 14s 23ms/step - loss: 0.0626 - acc: 0.9900 200/200 [==============================] - 2s 8ms/step Test loss: 0.37387794256210327 Test accuracy: 0.81 |
オプティマイザーを変更
SGDからAdamに切り替えてみました。大きく悪化しました。(笑)
1 2 3 4 5 6 7 8 9 10 11 12 |
Epoch 10/30 600/600 [==============================] - 19s 32ms/step - loss: 8.0859 - acc: 0.4983 Epoch 20/30 600/600 [==============================] - 17s 28ms/step - loss: 8.0859 - acc: 0.4983 Epoch 30/30 600/600 [==============================] - 17s 29ms/step - loss: 8.0859 - acc: 0.4983 200/200 [==============================] - 1s 7ms/step Test loss: 7.978457450866699 Test accuracy: 0.505 |
可視化にチャレンジ
djangoai仮想環境内で$pip install matplotlib します。
matplotlib-3.1.1 が入りました。
下記コードを最後に追加しました。オプティマイザーはSGDに戻しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import matplotlib.pyplot as plt # visualizer loss = history.history['loss'] nb_epoch = len(loss) plt.plot(range(nb_epoch), loss, marker='.', label='loss') plt.legend(loc='best', fontsize=10) plt.grid() plt.xlabel('epoch') plt.ylabel('loss') plt.show() |
次回
Web Application: 第6回 はじめてのwebアプリ
The following two tabs change content below.
Keita N
最新記事 by Keita N (全て見る)
- 2024/1/13 ビットコインETFの取引開始:新たな時代の幕開け - 2024年1月13日
- 2024/1/5 日本ビジネスにおける変革の必要性とその方向性 - 2024年1月6日
- 2024/1/3 アメリカ債権ETFの見通しと最新動向 - 2024年1月3日