Kerasで畳み込みニューラルネットワーク-簡単なCNNのコード-

ディープラーニング




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のフィルター数は精度と、どう関係があるのか?
最適なフィルター数を考えてみる

参考書


ゼロから作るDeep Learning


夢見るディープラーニング ニューラルネットワーク[Python実装]入門

タイトルとURLをコピーしました