takeda_san’s blog

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

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

前回のあらすじ

学習率と重みについて、少し深堀り。

takeda-san.hatenablog.com

やったこと

学習の実行と結果表示部分のプログラムを読む。

        // 確認用のリスナーを追加
        perceptron.setListeners( new ScoreIterationListener(1) );
         
        // 学習(fit)
        perceptron.fit( train );
         
        // パーセプトロンの使用
        for( int i=0 ; i<train.numExamples() ; i++ )
        {
            // i個目のサンプルについて、
            INDArray    input  = train.get(i).getFeatureMatrix();
            INDArray    answer = train.get(i).getLabels();
            INDArray    output = perceptron.output( input , false );
            System.out.println( "result" + i );
            System.out.println( " input  : " + input );
            System.out.println( " output : " + output );
            System.out.println( " answer : " + answer );
            System.out.flush();
             
        }

perceptron.setListeners( new ScoreIterationListener(1) );
リスナを登録して、定期的にログを出力するようにするコード。
setListenersメソッドの引数で指定する。
ScoreIterationListener(1)で学習一回につきログを1回出力するようだ。

perceptron.fit( train );
学習を実行する。

train.numExamples()でデータセット内のサンプル数が取得できる。
INDArray input = train.get(i).getFeatureMatrix();、で入力値を取得できる。
INDArray answer = train.get(i).getLabels();、で入力値につけたラベル(回答)を取得できる。
INDArray output = perceptron.output( input , false );、で学習させたパーセプトロンに入力値を与えて出力を得る。
次の行からは学習データの答えと出力値をコンソール出力して確認している。

ようやく最後まで読み切った。
プログラムの内容自体はJavaDocソースコードをよーーーーく読めば何とか理解できるレベルだが、そもそもの機械学習ディープラーニングの知識が明らかに不足しているので、その寄り道に時間が恐ろしくかかってしまった。
一旦、Deeplearning4jのコードから離れて、基礎知識をかためていこうと思う。

その道の方には有名なこのサイトをとりあえず見ていこうと思う。
最初のほうだけちらっと見たが、これも無料でやってもらって申し訳ないという気持ちになるすばらしいコンテンツだ。
本編のほうは日本語字幕がついていて、感謝の気持ちしかない。

https://www.coursera.org/learn/machine-learning

あとは、挫折していたDeep Learning Javaプログラミングをもう一度読んでいく。
すこし賢くなったので、前よりは読み進められるだろう。

次回の予定

・courseraの動画を見る
・Deep Learning Javaプログラミングを読む
・不明点の確認(乱数を指定する意味、確率的勾配降下法とは)
・プログラミングのための線形代数を読む
Mavenのpomの読み方