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:
に修正します。