ようやくデータの準備ができたので,文字認識をするためのニューラルネットワークのモデルを構築しよう.Keras を使ってモデルを記述します.
モデルを作る (05-model.py)
from keras.models import Sequential
from keras.layers import Dense
# モデルを作る
model = Sequential()
model.add(Dense(128, activation='relu', input_dim=225)) # input_dim = 15 x 15 = 225
model.add(Dense(10, activation='softmax'))
# モデルをコンパイルする
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.summary()
Using TensorFlow backend. Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_1 (Dense) (None, 128) 28928 _________________________________________________________________ dense_2 (Dense) (None, 10) 1290 ================================================================= Total params: 30,218 Trainable params: 30,218 Non-trainable params: 0 _________________________________________________________________
入力層には画像のピクセルごとの値を入力するので,入力層のニューロン数は 15×15=225 個になります.中間層のニューロン数はとりあえず128個としておき,活性化関数には ReLU 関数を指定することにします.これが6行目のコードの意味です.
7行目のコードの意味は次のとおりです.数字のカテゴリは10個(0〜9)あるので,出力層のニューロン数は10とします.また,活性化関数にはソフトマックス関数を使用します.
Kerasでは学習や予測を行う前に,10行目のようにモデルをコンパイルする必要があります.
14行目のように model.summary()
によって,構築したモデルの概要を確認することができます.入力層のニューロン数が m = 225,中間層のニューロン数が h = 128 なので,重みパラメータ w は 225 × 128 = 28,800 個になります.また,中間層のバイアス b は h = 128 個であるので,model.summary()
の出力において,dense_1 の Param # が 28,800 + 128 = 28,928 個になります.
同様に,中間層のニューロン数が h = 128,出力層のニューロン数が k = 10 なので,重みパラメータ w は 128 × 10 = 1,280個,バイアス b が k = 10 個になります.よって,model.summary()
の出力において,dense_2 の Param # が 1,280 + 10 = 1,290 個になります.さらに,Total params は 28,928 + 1,290 = 30,218 個になります.