アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うことを書いてます。

学習結果(パラメータ)を引き継いで追加学習するGUIな方法について/使い方36/Neural Network Console

 Neural Network Consoleの自動最適化機能をやってみました。

arakan-pgm-ai.hatenablog.com

 

今回は、ここで自動的に試行錯誤してくれた結果を引き継いで、発展させていく2つの方法を試してみます。 

たぶん、以下の2つのケースがあります。

ネットワーク構造だけを引き継いで新しいプロジェクトでチューニングする

  • ネットワーク+学習済のパラメータ込で引き継いで、追加学習をさせる。

 

ネットワーク構造だけを引き継ぐ

 

Traiingタブで左側に学習結果の一覧を表示させて、引き継ぎたいところで、右クリックしてメニューを表示します。

f:id:arakan_no_boku:20180414105551j:plain

 

ここで「Open in Edit Tab」を選ぶと、Editタブに選択した学習時点のネットワーク構造が表示されます。 

その状態で、名前をつけて保存で、別のプロジェクト名で保存すれば良いわけです。 

これは例えば、自動最適化で作られたうちで、まあまあ良い線いってるネットワーク構造があった。

でも、そのままではなくて、もうちょっと層を深くしていってみたい・・とか、それをベースに変更を加えて行きたいときに使えるかなと思います。

 

学習済パラメータを引き継いで、追加学習する

 

例えばです。 

ネットワーク構造の自動最適化をやってみました。 

なんとなく良さげなものがあるけど、DropOutとかが挟み込まれているので、指定したepoch数では学習が途中で終わってしまっている。 

ここでEpoch数を増やして一カラ学習しなおしてもいいんだけど、時間がもったいないので、途中までいけてる結果を引き継いで、追加学習させたいな・・。 

なんてときがあります。 

例えば、こういう学習結果になってたりするやつです。

f:id:arakan_no_boku:20180414111042j:plain

 

10epochで終わってますが、明らかに学習の途中でぶちきれてます。 

評価結果もこんなですし。

f:id:arakan_no_boku:20180414111552j:plain

 

でも、カーブの形はいいので、これを続けて学習させたら、わりとよい結果をだせるんじゃないかと考えたとします。 

そんなときは、その学習結果のところで右クリックしてメニューを表示します。

f:id:arakan_no_boku:20180414112242j:plain

 

ここで「Open in EDIT Tab with Weight」 を選びます。

そうすると、Editタブに選択した学習結果のネットワークモデルが表示されます。 

ですが、各レイヤーのプロパティを見ると、W.File、B.FileになんかのPathが書かれてますが、これによって、学習済の重みとバイアスのパラメータが初期値として引き継がれるわけです。

f:id:arakan_no_boku:20180414113724j:plain

 

自分はこの状態で名前をつけて保存で、別プロジェクトにした方がわかりやすくて良い(ひとつのプロジェクトに色んなネットワーク構成があると、わかりづらい・・)と考えてます。 

でも、そのままでも学習をすすめることはできます。 

お好みでよいとは思いますが、いずれにしてもStructure Search のチェックをはずすなど、Configタブの設定をきちんと修正しないと・・ですね。

 

一応、パラメータ引き継いで続きで学習はできてるみたい

 

これを引き続きで学習させてみました。

f:id:arakan_no_boku:20180414184108j:plain

 

確かに、続きのあたりから始まっているのがわかります。 

結局、このネットワーク構成では、追加のEpoch20あたりで、Bestがでて、それ以上収束しなかったみたいですが・・。

試しに、パラメータを引き継がず、ネットワーク構成だけを引き継いで、最初から学習しなおすのもやってみて、結果を比較しました。 

同じネットワーク構成でやってみたグラフがこちらです。

f:id:arakan_no_boku:20180414184904j:plain

 

同じような場所で頭打ちになってます。 

途中まで、非常にきれいなグラフになってたんですけどね。

結果的に、パラメータを引き継いで追加学習したものも、引き継がずに学習しなおしたものも最終的には、Accuracyは95%程度で頭打ちになって、同じような結果に終わりました。

 

まあ、できることはわかった

 

たまたま選んだネットワークモデルがよくなかったのか・・、あまり美しい結果にはなりませんでした。 

でも、この方法でできる・・というのはわかったので、今回はこれで良いかな。 

ではでは。

 

f:id:arakan_no_boku:20171115215731j:plain