だれかの備忘録

主に自分用。

MNIST分類のCNNサンプルプログラム

いま↓の本を読んでTensorFlowの勉強をしています。
TensorFlowではじめるDeepLearning実装入門(impress top gear) - インプレスブックス
この本にMNIST画像分類のCNNサンプルプログラムが載っています。これを使って今後いろいろ試したいことがあるので、このサンプルプログラムについて簡単にまとめておきます。プログラムに1か所間違いがあったので修正方法も書いておきます。

サンプルプログラム(mnist.py)

CNNのサンプルプログラムは本の3.3節に載っています(p.74-79あたり)。
同じのが以下にもあります。
TensorFlowDL-samples/mnist.py at master · thinkitcojp/TensorFlowDL-samples · GitHub

MNIST

数字(0~9)の手書き文字画像。
28x28pix, 1ch(グレースケール)の画像。
学習用が60,000枚、テスト用が10,000枚用意されている。

プログラム詳細

ネットワーク

表の上から順に下の方へ流れていきます。

形状 層の出力
入力層 28x28pix x 1ch (MNIST画像) 28x28pix x 1ch
畳み込み層(1) フィルタ 5x5pix x 1ch, 32個
畳み込み ストライド1x1pix x 1ch
活性化関数 ReLU
28x28pix x 32ch
プーリング層(1) マックスプーリング
 フィルタ2x2pix x 1ch
 ストライド2x2pix x 1ch
14x14pix x 32ch
畳み込み層(2) フィルタ 5x5pix x 32ch, 64個
畳み込み ストライド1x1pix x 1ch
活性化関数 ReLU
14x14pix x 64ch
プーリング層(2) マックスプーリング
 フィルタ2x2pix x 1ch
 ストライド2x2pix x 1ch
7x7pix x 64ch
=3136
全結合層 ノード数 1024個
活性化関数 ReLU
1024
出力層 ノード数 10個(MNISTの分類0~9) 10
他のパラメータ

学習率:0.01 (固定)
ミニバッチ数:50
繰り返し回数:1000 (計50,000枚の画像を使って学習する)

分類性能(Accuracy)の計算

テスト用データ10,000枚を推論して正解確率を計算する(=Accuracy)。

サンプルプログラムの注意点

上記のサンプルプログラムには精度の検証のところに間違いがあります。

 for step in range(1000):

ではstepが0~999の範囲で繰り返しますが、精度の検証のところが

 if step % 100 == 0:

だとstep==999の後にifの中を通らずに終わってしまいます。
なので、

 if (step+1) % 100 == 0:

に修正します。