目的
人が数字の画像から奇数か偶数か把握するとき,何の数字が描かれているのかを頭で数字に変換してから,その数字が奇数か偶数か,2段階の処理をします(多分).そこで,人間でいう奇数か偶数か考える過程をすっ飛ばして,画像を認識するだけのConvolution Neural Network(以下CNN) を用いて,数字の奇数・偶数は分類出来るのか検証してみた(出来るだろ, という意見はおいておいて...)
本記事のコードは以下においています.
githubリンク
使用データ
手書き数字画像と数字のラベルのセット
The Mnist database【http://yann.lecun.com/exdb/mnist/】
トレーニングデータ数 : 60,000 samples, テスト用データ数 : 10,000 samples
実験
Convolution Neural Networkを用いて,奇数/偶数の分類を試みました.
また,おまけで5以上/5以下の分類もやってみました.
CNNモデルは,2層の畳み込みと2層の全結合層からなるめちゃくちゃ簡単なもの.
(1)奇数のラベルを0,偶数のラベルを1としてモデルの学習
(2)5以上の数字のラベルを0, 5以下数字のラベルを1としてモデルの学習
結果
(1)奇数/偶数分類モデル
学習過程
lossとepochsの関係
一部テスト用画像と予測ラベル
(2)5以上/以下分類モデル
学習過程
lossとepochsの関係
一部テスト用画像と予測ラベル
結果からわかること
Validation lossをみると,4%,6%程度の誤差という結果を得られた.
ランダムな分類で50%の誤差だと考えると,今回の実験では画像認識から直接偶数奇数とか5以上5以下が分類出来ている!
まぁ数字の性質を捉えるなんて賢いことはしておらず,1,3,5,7,9のような形ならば奇数グループ,0,2,4,6,8のような形ならば偶数グループとしているだけだから,未知の数字見ても判断は出来ないだろうなぁ.(ただ何桁もの数字で学習して,一桁目が1,3,5,7,9であれば奇数だ!ってCNNが判断出来たら,未知の数字でも偶数奇数の予測はできそう.)
あと.
当たり前かもしれないけど,CNNは似ている画像だけを一つのラベルとする必要はなく(猫なら猫だけを一つのラベルとする,のように),法則さえあれば分類することが可能だといえる(下図).法則は,今回ならば{1,3,5,7,9→奇数,0,2,4,6,8→偶数}のようなもの.
興味深いこととして,(1)奇数偶数分類より(2)5以上以下分類のほうが,学習時間が長かった(例えば10[epochs]のとき,(1)1.558[minutes],(2)1.742[minutes]).
詳しく言うと,{1,3,5,7,9}と{0,2,4,6,8}で分類したときより,{0,1,2,3,4}と{5,6,7,8,9}で分類したときの方が,学習時間が長かった.この理由について現段階ではわからなかったのだが,グループ分けの仕方によって学習時間に差が出ることを確認することができた.(なにか分かる方いらっしゃれば教えていただければ幸いです...!)