Kerasで簡単なCNNのコード
今回のテーマは、「Kerasで畳み込みニューラルネットワーク」です。
Kerasを使った、簡単なCNNのコードを紹介していきます。
分類対象は、MNISTの手書き文字です。
文字といっても、0〜9の数字です。
Kerasを使ってCNNを構築
Kerasを使って、畳み込みニューラルネットワーク(CNN)を構築・学習していきます。
Kerasを使うことで、非常に簡単に、畳み込みニューラルネットワークの実装ができます。
MNISTデータセットを使用
Kerasには、MNISTのデータセットがあります。
1 | from keras.datasets import mnist |
CNNのサンプルコード
01 02 03 04 05 06 07 08 09 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 51 52 53 54 55 56 57 58 59 60 61 | import numpy as np #データの読み込みと前処理 from keras.utils import np_utils from keras.datasets import mnist #kerasでCNN構築 from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D from keras.layers import Activation, Dropout, Flatten, Dense from keras.optimizers import Adam #時間計測 import time ''' データの読み込みと前処理 ''' #データの読み込み (X_train, y_train), (X_test, y_test) = mnist.load_data() #訓練データ X_train = X_train.reshape( 60000 , 28 , 28 , 1 ) X_train = X_train.astype( 'float32' ) #型を変更 X_train / = 255 #0から1.0の範囲に変換 #正解ラベル correct = 10 y_train = np_utils.to_categorical(y_train, correct) #テストデータ X_test = X_test.reshape( 10000 , 28 , 28 , 1 ) X_test = X_test.astype( 'float32' ) X_test / = 255 y_test = np_utils.to_categorical(y_test, correct) ''' CNNの構築 ''' model = Sequential() model.add(Conv2D(filters = 10 , kernel_size = ( 3 , 3 ), padding = 'same' , input_shape = ( 28 , 28 , 1 ), activation = 'relu' )) model.add(Flatten()) model.add(Dense( 10 , activation = 'softmax' )) model. compile (loss = 'categorical_crossentropy' , optimizer = Adam(), metrics = [ 'accuracy' ]) ''' 学習 ''' #計測開始 startTime = time.time() history = model.fit(X_train, y_train, epochs = 20 , batch_size = 100 , verbose = 1 , validation_data = (X_test, y_test)) score = model.evaluate(X_test, y_test, verbose = 0 ) print ( 'Test Loss:{0:.3f}' . format (score[ 0 ])) print ( 'Test accuracy:{0:.3}' . format (score[ 1 ])) #処理時間 print ( "time:{0:.3f}sec" . format (time.time() - startTime)) |
結果
Test Loss:0.081
Test accuracy:0.981
time:170.416sec
NNとCNNの比較
以下の結果は、前回のkerasによるニューラルネットワーク-1のシンプルなニューラルネットワークの結果です。
Test Loss:0.088
Test Accuracy: 0.9794
time:39.577sec
精度(正解率)は上がっていますが、
処理時間がかなり増加しています。
Kerasでこんなこともできるぞ!!
アニメ画像をCNNで学習させて、分類器を作る!

KerasによるCNNでアニメ画像の認識-ジャンヌ3姉妹-
...
CNNのフィルター数と精度の実験
CNNのフィルター数は精度と、どう関係があるのか?
最適なフィルター数を考えてみる