Neural Network Console(ニューラルネットワークコンソール:以後nnc)のバージョンが1.20から、新機能として「ユニット機能」が追加されました。
今回は、それを使ってみます。
ユニット機能とは
例えば、以下のような複数のレイヤーの組み合わせをひとまとめにして名前をつけて、再利用できる機能です。
チュートリアルがあるので、それを見ながら試してみます。
プロジェクト内でユニットを作ってみる
nncを立ち上げて、新しいプロジェクトを作ってやってみます。
最初にユニットを作ります。
EDITタブで「+」ボタンを押します。
新規タブができるので、適当なユニット名に変更します。
今回は、とりあえず「CnnUnit」にしてみました。
それでユニットとしてまとめたいレイヤーを「CnnUnit」タブに設定していくわけですが、必ず「Input」レイヤーが必要です。
使いまわしたいのは、「Convolution」「MaxPooling」「ReLu」のセットだけなんですが、Inputをつけないとエラーになるので仕方ありません。
でも、どうやら、このInputはダミーっぽいです。
確認のため、実際に利用するInputは「MINIST」なので「1,28,28」のところ、あえて「1,64,64」に変えてみましたが、これで問題なく実行できますから。
さすがに「1,5」みたいに次元を変えると、Convolution以下のレイヤーがエラーになるので無理ですが、次元があってれば、あまり神経質になる必要はないのかなという気はしますね。
Mainタブでユニットを使う
利用したいところに、UNITコンポーネントをドロップします。
そのUnitの「Network」プロパティに、定義したユニットの名前(今回ならCnnUnit)を入力すれば良いです。
それ以外は普通にレイヤーを重ねていきます。
これで保存すれば、とりあえず学習できます。
わずか10Epochしか学習してませんが、Accuracy 99.01%は結構なもんです。
ユニットにパラメータ(引数)を追加してみる
無理に使わなくても、上記みたいに使えますが、引数としてパラメータを使うこともできます。
Argumentというコンポーネントを使います。
ユニットタブにいくつでもドロップできるみたいです。
ドロップしたら、名前(Name)と型(Type)と初期値(Value)をプロパティに入力します。
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:ファイル名
あとは、各レイヤーのプロパティで、作成したパラメータの名前の前に「*」をつけて数字の代わりに入力すれば、いいです。
そうしとくと、Mainタブで定義したUnitのプロパティに定義した「Argument」の名前がでてくるので、そこで任意の値に変更すればいいです。
と・・まあ、こんな感じで使えます。
まさしく、プログラムでいう関数とかサブルーチン的なもの・・ですかね。
ではでは。