ゼロから作るDeep Learningをやってみた
オライリーの「ゼロから作るDeep Learning」をやってみました。
本を一度通読しただけでは、ニューラルネットワークの各ニューロンがどんな計算をしているか、とか、重みは実際にはどんな値なのか、とか、学習にはどのくらい時間がかかるのか、とかわからなかったので、本に書いてあるコードを試してみることにしました。
Anacondaを入れて、Jupyterを動かして・・
この本はMNISTのデータセットを使って手書き文字認識を実現することをやっていますが、前半では普通のNNでやって、最後でCNNを説明するという構成になっています。
第3章では、28×28の画像を784個の1次元の入力とみなして、50個のニューロンを持つ隠れ層と、100個のニューロンを持つ隠れ層を通して、10個のニューロンを持つ出力層へと導いています。
この学習済みの重みがどんなものかを見てみました。
結構ランダムな感じで、人間が見ても、ニューラルネットワークの心の中はわからないようでした。
この本の第4章ではニューラルネットワークを3層に減らして、学習させる話が書かれています。実際に学習させてみると、予想に反してそれほど時間はかかりませんでした。だいたい20秒程度でこの16エポックが終わります。正解率は94.5%くらいまでいきます。
しかし、ニューロンを500個に増やしても、正解率は上がらず、時間がかかるだけでした。
逆にニューロンを10個まで減らしてみても、ほとんど正解率は下がりませんでした。

(ただし、9個以下に減らすと下がっていく)
面白いものですね。
3層(隠れ層が1つ)のニューラルネットワークでも、MNISTのデータ程度なら94%くらいの精度で認識できるし、ニューロンの数はあまり関係がないということでした。
情報は各シナプスのつながりの重みにあるのでしょうか。
| 固定リンク



コメント