Python入門トップページ


手書き数字を認識するAIを作ってみよう : 目次

  1. 画像データの準備と確認
  2. 画像データを読み込んでみよう
  3. 画像データの一覧を読み込んでみよう
  4. 学習データとテストデータを準備する
  5. 保存したデータを開いてみる
  6. モデルを作る
  7. 学習(トレーニング)させてみよう
  8. モデルを評価しよう
  9. 学習データで認識させてみよう(1)
  10. 学習データで認識させてみよう(2)
  11. 学習データで認識させてみよう(3)
  12. テストデータで認識させてみよう
  13. モデルと重みパラメータを保存しよう
  14. 学習済みモデルをロードしよう
  15. 学習済みモデルをロードして,認識してみよう

モデルを作る

ようやくデータの準備ができたので,文字認識をするためのニューラルネットワークのモデルを構築しよう.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 個になります.

tegaki_nn_param

目次に戻る