takeda_san’s blog

KotlinとVRを頑張っていく方向。

パーセプトロンプログラムの理解 その2

前回のあらすじ

活性化関数として使われる、シグモイド関数
誤差関数として使われるMSEについてそれとなくわかった気になる。

takeda-san.hatenablog.com

やったこと

実際にプログラムを読んでいく。

INDArray    tIn     = Nd4j.create( new float[]{ 1 , 1 ,         // 入力1
                                                        1 , 0 ,         // 入力2
                                                        0 , 1 ,         // 入力3
                                                        0 , 0 },        // 入力4
                                           new int[]{ 4 , 2 } );        // サイズ

INDArrayとは、Deeplearning4jに含まれるND4j内に定義された行列を格納する型。
Nd4jのファクトリクラスで生成されたオブジェクトを格納する。
Nd4j.createメソッドの第一引数にfloatの配列、第二引数にintの配列を渡している。
JavaDocを読むと第一引数は「N次元配列」をメモリに連続して格納するために一つの配列にデータを格納したもの。
第二引数は行列の行, 列をしていするものらしい。
大量にあるテストデータで、いちいち多次元配列を作っていたのではメモリ効率が悪いというのは理解できる。

http://nd4j.org/doc/org/nd4j/linalg/factory/Nd4j.html#create-float:A-int:A-

つまり、ここは4行、2列の行列([[1,1],[1,0],[0,1],[0,0])のデータを作りますということ。

次の出力テストデータの生成も同様に4行1列のデータを作りますということ。

INDArray    tOut    = Nd4j.create( new float[]{ 1 , 1 , 1 , 0} ,
                                           new int[]{ 4 , 1 } );        // サイズ

次の行はコメント通り、入出力をワンセットとして扱うためのデータセットとして入力データ、出力データを格納している。

DataSet     train   = new DataSet( tIn , tOut );         // 入出力を対応付けたデータセット

しかしまぁ、Eclipseデフォルトのフォーマッタだとインデントをせっかくそろえても崩れて悲しい気持ちになる。 ちょっとカスタマイズしようか…

次回の予定

・プログラミングのための線形代数を読む
・サンプルプログラム(Perceptron/LenetMnistExample)を読む
Mavenのpomの読み方