AIに手を出してみる。TensorFlowで学ぶディープラーニング入門 8
皆さん、こんにちは、こんばんわ。
His First Japan 合同会社 代表社員の字引淳です。
前回は、「この本のChapter03-1はChapter02-1に書かれていることの拡張でした。」という、ことを書きました。
TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~
- 作者: 中井悦司
- 出版社/メーカー: マイナビ出版
- 発売日: 2016/09/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
今回は、「この本のChapter03-2に書かれていることはChapter03-1の拡張でした。」ということを書きます。
異なる点は、出力層の活性関数がソフトマックス関数を利用していることと、MINISTを利用していること。そして、結果のグラフです。
これをみると、今まで学んだものを使って、文字の解析を行なっていることがわかります。
ここで、MINISTが初めて出てきますが、これは、機械学習のデータセットで要は、手書き文字の標本データというものでしょうか?
ここからダウンロードできます。
MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges
今回の資料をまとめたものは、以下になります。
今回は、特に難しいことはありませんが、前回の記事の内容と合わせて考えてみると、
- 隠れ層のノードの数、活性関数、学習率、最適化処理の回数などを調整し、パラメータの最適化を行う。
- その最適化されたパラメータを用いて、機械学習を行う。
その流れが記載されているということがわかりますね。
こちらでも当然、隠れ層のノードの数、活性関数、学習率、最適化処理の回数を調整して出てくる結果を見てみました。
簡単なところというと、あまり考えずに先へ進みがちですが、熟読すると、意外とそこに作者の意図が潜んでいることもありますね。
実際に書き換えるとどうなるかを見て見ます。
実際にやって見た結果は、以下に貼り付けておきます。
ここで伝えたいのは、やはり、隠れ層のノードの数、活性関数、学習率、最適化処理の回数を調整して、「最適な処理の時間内に最大の正解率を出せる組み合わせを見つけよう!」というものですね。
例えば、隠れ層のノードの数を2に変え、最適化回数を2000のまま、活性関数をハイパボリックタンジェント変えてみると、結果はこうなりました。
一瞬で終わる。
しかし、1行しか出ていない。
2000回回した後の正解率が極端に低い。
Step: 2000, Loss: 414.523560, Accuracy: 0.113500
元のソースに戻して、隠れ層のノードの数を2に変えた場合
やはりすぐに終わるが、
しかし、5の行がない。
Step: 2000, Loss: 2973.787842, Accuracy: 0.910200
隠れ層のノードの数が、少なすぎると決められた最適化回数の中で処理を仕切れないということでしょうか?
では、逆にノードの数が多かった場合はどうなるでしょうか?
ノードの数を20000にすると、どうなるでしょう。
残念。
ResourceExhaustedErrorTraceback (most recent call last)
エラーで処理を確認できませんでした。
ツールの限界ですね。
では、隠れ層のノード数を単純に倍(1024*2)にして見ました。
正解率が上昇しています。
Step: 2000, Loss: 965.670593, Accuracy: 0.972800
本書に載っているサンプルそのままの場合、
Step: 2000, Loss: 990.451965, Accuracy: 0.970600
この結果から、隠れ層のノードの数が多くなることで、
メリット:正解率がアップする。
デメリット:処理時間が長くなる。
今回のサンプルでは、97%くらいの正解率で折り合いをつけています。
倍にしても0.002%くらいしか上がってないので、妥当だろうと思います。
あとは、活性関数をハイパボリックタンジェントに変えてみるとどうなるかをやって見ますね。
隠れ層のノード数を2048、活性関数をハイパボリックタンジェント
Step: 2000, Loss: 1039.675293, Accuracy: 0.966800
使えているけど、若干正解率が下がった。