前回までで、CNN(畳み込みニューラルネットワーク)のNeural Network Console上での実装をやってみた。
Neural Network Consoleでエオルゼア文字を解析してみた - 日曜プログラミング
Neural Network Consoleでエオルゼア文字を解析してみた (その2) - 日曜プログラミング
Neural Network Consoleでエオルゼア文字を解析してみた (その3) - 日曜プログラミング
ただ、全結合層の周りの処理などが不勉強なので、少し調べてみた。
以下の記事によると、畳み込み部分と全結合層ではTanhよりReLUを使ったほうがよいらしい。
ここでは数学的比較は行いません。
ここでは実装を行い、その比較まで行いたいと思います。
グラフィカルに実装し、ぱっと実行結果を比較できるのはいいですね。
前回までの実装から、Tanh部分をReLUに変更
実際に動かしてみた
確かに動きますね。学習結果タブから評価を行ってみましょう。
グラフィカルなものを比較したかぎり、エラーが少なく、結果の収束が早い気がします。
Tanhでの学習グラフ
ReLUでの学習グラフ
ただ、これでは正確な比較になりません。
互いに10回ずつ実行して比較してみた
グラフィカルに比較できるのはいいですが、ちょっと見づらいですか?
見づらいですね。でも直感的に見れるのはイイと思います。
ちょっとCSSで吐き出してみました。それを表に変形してみます。
Tanhでの結果
実行タイムスタンプ | Validation | Best Validation |
---|---|---|
20170826_044716 | 0.003396 | 0.001613 |
20170826_044310 | 0.002703 | 0.002103 |
20170826_043947 | 0.002729 | 0.003344 |
20170826_043628 | 0.006254 | 0.002706 |
20170826_043146 | 0.004643 | 0.002834 |
20170826_042824 | 0.003469 | 0.002378 |
20170826_042440 | 0.036845 | 0.003467 |
20170826_042041 | 0.005067 | 0.001765 |
20170826_041617 | 0.005954 | 0.003078 |
20170826_041108 | 0.008813 | 0.001854 |
ReLUでの結果
実行タイムスタンプ | Validation | Best Validation |
---|---|---|
20170826_053255 | 0.001079 | 0.001019 |
20170826_052501 | 0.001019 | 0.001266 |
20170826_052122 | 0.001094 | 0.001009 |
20170826_051721 | 0.001102 | 0.001251 |
20170826_051321 | 0.001496 | 0.001412 |
20170826_050703 | 0.001113 | 0.001375 |
20170826_050347 | 0.003981 | 0.001263 |
20170826_045851 | 0.001095 | 0.001326 |
20170826_045543 | 0.001100 | 0.001049 |
20170826_045110 | 0.001241 | 0.001490 |
まだちょっと読みにくいですか?読みにくいですよね?
せっかくCSVで吐き出しているので、Google スプレッドシートでグラフにしてみます。
tenh10_relu10.csv - Google スプレッドシート
グラフの画像はこうなりました。
左側10件がTanh、右側10件がReLUです。
赤点が学習途中の一番良かったValidation、青点が学習が終わったときのValidationです
ReLUの方が精度いいことがわかりやすくなったかなと思います。
今後の予定
さて、ReLUでの計算が言語を超える力の実装に組み込めるか
TensorFlowの関数にReLUあるかどうか。ありますよね。こういう汎用関数がたくさん用意されているからTensorFlowが流行っているんですよね。
以下のサイトを参考にしました。