最近噂のDeepLearningLibrary DeepLearning4jを使ってみた(後編)
Sponsored Links
DeepLearning 4jの解説の後編を進めていきたいと思います。
皆さんこんにちは
お元気でしょうか。私はSWをエンジョイしています。
一番上には今日話すこと持ってこないと、twitterで拡散された時にタイトル以外
何がいいたいのかわからない内容になってしまいますね。
今日は前回行ったDeepLearning 4jの解説の続きを行っていきます。
メインは具体的なソースコードの解説です。
Dataset構築
CSVファイルの読み込み
RecordReader recordReader = new CSVRecordReader(0,","); recordReader.initialize(new FileSplit(new ClassPathResource("iris.txt").getFile())); DataSetIterator iterator = new RecordReaderDataSetIterator(recordReader,3,3); DataSet next = iterator.next();
Model構築
Source Code
まずは、MultiLayerPerceptronの例を見てみます。
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder() .seed(seed) .iterations(iterations) .learningRate(1e-3) .l1(0.3).regularization(true).l2(1e-3) .constrainGradientToUnitNorm(true) .list(3) .layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(100) .activation("tanh") .weightInit(WeightInit.XAVIER) .build()) .layer(1, new DenseLayer.Builder().nIn(100).nOut(50) .activation("tanh") .weightInit(WeightInit.XAVIER) .build()) .layer(2, new OutputLayer.Builder(LossFunction.MCXENT) .weightInit(WeightInit.XAVIER) .activation("softmax") .nIn(50).nOut(outputNum).build()) .backprop(true).pretrain(false) .build(); MultiLayerNetwork model = new MultiLayerNetwork(conf); model.init(); model.setListeners(Arrays.asList((IterationListener) new ScoreIterationListener(listenerFreq))); while(iter.hasNext()) { DataSet iris = iter.next(); iris.normalizeZeroMeanZeroUnitVariance(); model.fit(iris); } Evaluation eval = new Evaluation(); DataSetIterator iterTest = new IrisDataSetIterator(numSamples, numSamples); DataSet test = iterTest.next(); test.normalizeZeroMeanZeroUnitVariance(); INDArray output = model.output(test.getFeatureMatrix()); eval.eval(test.getLabels(), output); log.info(eval.stats());
解説
NeuralNetConfiguration.Builderのメソッド
メソッド | 意味 |
seed | 変数のseed |
iterations | 学習回数 |
learningRate | 学習率 |
l1 | l1正則化のパラメータ |
l2 | l2正則化のパラメータ |
list | ニューラルネットワークの層数 |
layer | ニューラルネットワークのLayer,activationが活性化関数、nInが入力 |
backprop | 誤差逆伝搬をonにする。(学習をon) |
pretrain | 事前学習のon off |
configurationの読み込み
new MultiLayerNetwork(conf)を用いて、設定を読み込ませ、ネットワークを構築しています。
MultiLayerNetwork model = new MultiLayerNetwork(conf);
定期的なスコアの読み込み
setListnersを用いて、Scoreを定期的に出力する設定ができます。
model.setListeners(Arrays.asList((IterationListener) new ScoreIterationListener(listenerFreq)));
実際の出力は以下のようになっています。
o.d.o.l.ScoreIterationListener - Score at iteration 0 is 1.6539067225404582 o.d.o.l.ScoreIterationListener - Score at iteration 2 is 1.4139220929952463 o.d.o.l.ScoreIterationListener - Score at iteration 4 is 1.3286859775479634 o.d.o.l.ScoreIterationListener - Score at iteration 6 is 1.3062426062059402 o.d.o.l.ScoreIterationListener - Score at iteration 8 is 1.2940777707539002 o.d.o.l.ScoreIterationListener - Score at iteration 10 is 1.2514277131886284 o.d.o.l.ScoreIterationListener - Score at iteration 12 is 1.2353837197901805 o.d.o.l.ScoreIterationListener - Score at iteration 14 is 1.2143767691576481
予測結果の出力
model.outputに特徴ベクトルを読みこませることによって
modelから予測できる結果を出力します。
INDArray output = model.output(test.getFeatureMatrix());
予測結果の評価
eval.evalによって
accuracy,precision,recall,F1を計算します。
eval.eval(test.getLabels(), output); log.info(eval.stats());
実際の出力
==========================Scores======================================== Accuracy: 0.3333 Precision: 0.3333 Recall: 1 F1 Score: 0.5 ===========================================================================
解説してみたけれども、個人的にはPythonで書くNeural Networkに比べるとわかりにくい。
Theanoとchainerのようなタイプに慣れすぎて構造がわかりにくいからでしょうか。