2016/03/13

[DL]層を増やしてみよう (2) - 最終回

増やすのだ。

layerSizes = 2:50*3:2

単に、cntkファイルの*2を*3にしただけだ。
グラフを見てみると、数が増えているのがわかる。
龍の背骨みたいだな(見たことないけど)。

image

肝心の結果は・・

ErrorPrediction/Sample = 0.3946932

隠れ層が2枚の時は0.04145937だったので、よくない。
これが、層を増やしたからといって結果がよくなるわけではない、という現象か。

 

活性化関数を変えてみよう。

  • Sigmoid : 0.3946932
  • Tanh : 0.048092869
  • RectifiedLinear : 0.059701493

ほう、2枚だったときとはずいぶんと違うものだ。
あのときはSigmoidが一番よい結果だったのだが、今回は一番悪い。
TanhとRectifiedは安定している・・・のか?
そういう単純なことでは無いんだろうな。

 

では、何も考えず、隠れ層を5枚にしてみよう。
3枚くらいの時には気にならなかったが、5枚くらいになるとCNTKの実行時間が格段に違うな。。。
そして、RectifiedLinearの速さに気付くようになった。

  • Sigmoid : 0.46766169
  • Tanh : 0.053067993
  • RectifiedLinear : 0.46766169

うーん・・・。
どう考えるとよいのか。


とにかく、層を増やせばいいというわけではないのは、わかった。
そして、活性化関数によって結果がずいぶん違うのもわかった。
また、処理時間も違いがあるのがわかった。

 

こういうのって、時間がかかる=性能がよくなる、というのを期待してしまうのだが、そうならない。
そして、このパラメータだけ気にすればよい、というわけでもない。
そもそも、パラメータだけじゃ無くて、入力するデータの形式とか、隠れ層にしても単に全部つなぐだけじゃなく、戻したり、一部は伝えなくしたりとか、やり方がいろいろある。

その辺りの微調整が、CNTKのSimpleNetworkBuilderではできないから、自分でネットワークを組んでいくのかな?
でも、ミニバッチとかを見直すだけでも違いがあったから、自分で組むのは最終手段なのだろうか。

じゃあなんだ、次は自分でネットワークを組んでみる、なのか?
やったことないけど、敷居が高そうだなぁ・・・。
CNTKの、音声認識みたいな複雑そうなものでもSimpleNetworkBuilderを使っているから、ほかにいじれるパラメータがあるのかもしれん。
しれんが、よくわからんので、次回からMNISTのサンプルを見ながら作ってみましょうかね。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。