SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

ネットワーク構造自動最適化機能を試してみる(その2)/Neural Network Console

Neural Network ConsoleのStructure Search(ネットワークの自動最適化機能)を試すの2回目をやってみます。

f:id:arakan_no_boku:20190326212937j:plain


ネットワーク構造自動最適化機能を試してみる(その2)

その(1)の続きです。

arakan-pgm-ai.hatenablog.com

 それで、どんな機能なのかは、なんとなくつかめたので、「とりあえずやった時の反省点」を踏まえて、もう一回チャレンジしてみようというのが、今回の趣旨です。

 

前回の反省点は、以下の2点です。

  • Epoch数は多めにしておく必要がある。
  • Time Limitは指定しない方がよいかもしれない。

Epoch数が10回だと「学習の途中でぶちきられた」感じで収束できていないグラフになっているのが多かった。 

あと、学習の進み具合に問題はないのに、途中で終わった・・つまり時間で打ち切られたっぽい・・もあった。 

この2点が理由です。 

 

Epoch数を50にして、Time Limitなしでやってみる

変更したConfigタブはこんな感じです。

f:id:arakan_no_boku:20180412002000j:plain

 

前回から変更したのは赤枠の部分。 

Max Epochは 10 から、一気に50にしてみます。 

あと、ValidationのMaxのところを、リファレンスを参考にした0.05から、0.2に変更しています。 

これは0.05だと、学習の最初(1Epoch目)でしきい値を超えて、打ち切られてしまっていたグラフが結構あり、50パターンもできていたのに、最後まで学習がすすんでいたものが半分くらいしかなかったので、ちょっと緩めてみたということです。 

あと、Time Limitを空白にしてます。 

これで時間はかかるかもしれませんが、学習が途中経過で止まるということはなくなるはずです。

 

再び一晩中(今度は8時間)動かし続けてみる

寝る前に学習を開始しました。 

前回よりちょっと早めの時刻にして、8時間動かしてみます。 

結果として、できていたのは7パターン。 

最後は出勤時刻になったのでストップしましたが、他のパターンはすべて学習が最後まで終わってます。 

せっかくなので、ネットワーク構造が自動最適化機能によって、どんな風に変更されていったのかを時系列にのせてみます。 

まず、元々のLeNetです。

f:id:arakan_no_boku:20180410214550p:plain

いきなり、レイヤーが変更されてます。

3つめのReLuがELU。

4つめのMaxPoolingがAveragePoolingに変わってます。

f:id:arakan_no_boku:20180412193615p:plain

ところが、以降はレイヤーの入れ替えはありません。 

 

Outputパラメータの値が微妙に変化

レイヤーの構成は同じで、各Outputパラメータの値が微妙に変わっていきます。 

Convolution、16.22.22から、16.25.24になり、以降がそれにあわせて調整されてます。 

結果的にこれが自動最適化された中では一番精度がよかったものです。

f:id:arakan_no_boku:20180412193752p:plain

同様に、16.25.24から16.28.22になってます。

f:id:arakan_no_boku:20180412194135p:plain

今度は、16.28.22から6.28.22になってます。

f:id:arakan_no_boku:20180412194343p:plain

今度はConvolutionのOutputは変わらずに、ELUの後続の、AveragePoolingのShapeが、6.9.7から、6.7.5になってます。

f:id:arakan_no_boku:20180412194440p:plain

最後のものは、CovolutionのOutputが、6.28.22から3.28.22になってます。

f:id:arakan_no_boku:20180412194520p:plain

 

面白いです。 

こういう調整の仕方をするんですねえ。

 

結果的にはベンチマークに勝てたものはなかったですが

サンプルで用意されたLeNet.sdcprjとMNISTをそのままデフォルトのハイパーパラメータで学習・評価した結果である以下がベンチマークです。 

かつ、Epoch数が10と少なめでもあります。

f:id:arakan_no_boku:20180409232111j:plain

 

そして、以下が今回自動最適化で生成されたネットワーク構造でもっとも成績のよかったものです。

f:id:arakan_no_boku:20180412004022j:plain

 

結局、ベンチマークは超えられませんでした。 

でも、これはサンプルプロジェクトで用意されているものは、すでに最適化されてるんだなと、再確認できただけのことです。 

この自動最適化機能の便利さをスポイルするものではありません。 

普通は、自分で設計したネットワーク構造でやりますものね。 

ある程度まで絞り込んだら、この自動最適化機能にかけて、もっと効率のよいネットワーク構造がないかどうかをチェックする。 

それで、今回のLeNetみたいに、ベンチマークを超えるものがでなかったら、その条件下では最善とみなすことができる。 

こういうアプローチでネットワーク構造の検証ができるということですかね。

ではでは。