増やすのだ。
layerSizes = 2:50*3:2
単に、cntkファイルの*2を*3にしただけだ。
グラフを見てみると、数が増えているのがわかる。
龍の背骨みたいだな(見たことないけど)。
肝心の結果は・・
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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。