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

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

Ver1.20から追加された「ユニット機能」を使ってみる/Neural Network Console

Neural Network Console(ニューラルネットワークコンソール:以後nnc)のバージョンが1.20から、新機能として「ユニット機能」が追加されました。

今回は、それを使ってみます。

f:id:arakan_no_boku:20190326212937j:plain

 

ユニット機能とは

例えば、以下のような複数のレイヤーの組み合わせをひとまとめにして名前をつけて、再利用できる機能です。

f:id:arakan_no_boku:20180622075356j:plain

チュートリアルがあるので、それを見ながら試してみます。

support.dl.sony.com

 

プロジェクト内でユニットを作ってみる

nncを立ち上げて、新しいプロジェクトを作ってやってみます。

f:id:arakan_no_boku:20180622232653j:plain

最初にユニットを作ります。

EDITタブで「+」ボタンを押します。

f:id:arakan_no_boku:20180622233008j:plain

 

新規タブができるので、適当なユニット名に変更します。 

今回は、とりあえず「CnnUnit」にしてみました。

f:id:arakan_no_boku:20180622233452j:plain

 

それでユニットとしてまとめたいレイヤーを「CnnUnit」タブに設定していくわけですが、必ず「Input」レイヤーが必要です。

f:id:arakan_no_boku:20180622233945j:plain

 

使いまわしたいのは、「Convolution」「MaxPooling」「ReLu」のセットだけなんですが、Inputをつけないとエラーになるので仕方ありません。 

でも、どうやら、このInputはダミーっぽいです。 

確認のため、実際に利用するInputは「MINIST」なので「1,28,28」のところ、あえて「1,64,64」に変えてみましたが、これで問題なく実行できますから。 

さすがに「1,5」みたいに次元を変えると、Convolution以下のレイヤーがエラーになるので無理ですが、次元があってれば、あまり神経質になる必要はないのかなという気はしますね。

 

Mainタブでユニットを使う

利用したいところに、UNITコンポーネントをドロップします。

f:id:arakan_no_boku:20180622235145j:plain

 

そのUnitの「Network」プロパティに、定義したユニットの名前(今回ならCnnUnit)を入力すれば良いです。

f:id:arakan_no_boku:20180622235610j:plain

 

それ以外は普通にレイヤーを重ねていきます。

f:id:arakan_no_boku:20180623000043j:plain

 

これで保存すれば、とりあえず学習できます。

f:id:arakan_no_boku:20180623000442j:plain

 

わずか10Epochしか学習してませんが、Accuracy 99.01%は結構なもんです。

f:id:arakan_no_boku:20180623000549j:plain

 

ユニットにパラメータ(引数)を追加してみる

無理に使わなくても、上記みたいに使えますが、引数としてパラメータを使うこともできます。 

Argumentというコンポーネントを使います。

f:id:arakan_no_boku:20180623001452j:plain

 

ユニットタブにいくつでもドロップできるみたいです。 

ドロップしたら、名前(Name)と型(Type)と初期値(Value)をプロパティに入力します。

f:id:arakan_no_boku:20180623002210j:plain

 

Typeは表示される選択肢から選びます。 

レイヤーリファレンスにも書いてありますが、よく使いそうなものだけ、ちょっと補足して引用します。

Boolean:True or False
Int:整数(例: 0)
IntArray:整数の配列(例:0,0)
PInt:1以上の整数(例:1)
PIntArray:1以上の整数の配列(例:1,28,28)
Float:浮動小数点数(例: 0.5)
FloatArray:浮動小数点数の配列(例: 0.3,0.5)
Text:文字列
File:ファイル名

 

あとは、各レイヤーのプロパティで、作成したパラメータの名前の前に「*」をつけて数字の代わりに入力すれば、いいです。

f:id:arakan_no_boku:20180623003458j:plain

 

そうしとくと、Mainタブで定義したUnitのプロパティに定義した「Argument」の名前がでてくるので、そこで任意の値に変更すればいいです。

f:id:arakan_no_boku:20180623003858j:plain

 

と・・まあ、こんな感じで使えます。 

まさしく、プログラムでいう関数とかサブルーチン的なもの・・ですかね。

ではでは。