2017-02-19 10 views
0

をリスナーをキャストするので、私に簡単に行くことができません。 は、私がdl4jでの作業は初めて午前、コレクションにDL4J

私はコードが正常に動作しなければならない

import org.datavec.api.records.reader.RecordReader; 
import org.datavec.api.records.reader.impl.csv.CSVRecordReader; 
import org.datavec.api.split.FileSplit; 
import org.deeplearning4j.datasets.datavec.RecordReaderDataSetIterator; 
import org.deeplearning4j.nn.api.OptimizationAlgorithm; 
import org.deeplearning4j.nn.conf.MultiLayerConfiguration; 
import org.deeplearning4j.nn.conf.NeuralNetConfiguration; 
import org.deeplearning4j.nn.conf.Updater; 
import org.deeplearning4j.nn.conf.layers.DenseLayer; 
import org.deeplearning4j.nn.conf.layers.OutputLayer; 
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork; 
import org.deeplearning4j.nn.weights.WeightInit; 
import org.deeplearning4j.optimize.listeners.ScoreIterationListener; 
import org.nd4j.linalg.api.ndarray.INDArray; 
import org.nd4j.linalg.dataset.DataSet; 
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator; 
import org.nd4j.linalg.lossfunctions.LossFunctions; 
import org.deeplearning4j.eval.Evaluation; 

import java.io.File; 
import java.util.Collection; 


public class MLPClassifierLinear 
{ 
    public static void main(String[] args) throws Exception 
    { 
     int seed = 123; 
     double learnRate = 0.01; 
     int batchSize = 50; 
     int nEpochs = 30; 
     int numInputs = 2; 
     int numOutputs = 2; 
     int numHiddenNodes = 20; 
     int labelField = 0; 
     int numOfLabels = 2; 

     //Load Training Data 
     RecordReader rr = new CSVRecordReader(); 
     rr.initialize(new FileSplit(new File("C:\\Users\\Oria\\MLP\\linear_data_train.csv"))); 
     DataSetIterator trainIter = new RecordReaderDataSetIterator(rr, batchSize,0,2); 

     //Load Testing Data 
     RecordReader rrTest = new CSVRecordReader(); 
     rrTest.initialize(new FileSplit(new File("C:\\Users\\Oria\\MLP\\linear_data_eval.csv"))); 
     DataSetIterator testIter = new RecordReaderDataSetIterator(rrTest, batchSize,0,2); 

     MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder() 
       .seed(seed) 
       .iterations(1) 
       .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) 
       .learningRate(learnRate) 
       .updater(Updater.NESTEROVS).momentum(0.9) 
       .list() 
       .layer(0, new DenseLayer.Builder() 
         .nIn(numInputs) 
         .nOut(numHiddenNodes) 
         .weightInit(WeightInit.XAVIER) 
         .activation("relu") 
         .build()) 
       .layer(1, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD) 
         .weightInit(WeightInit.XAVIER) 
         .activation("softmax") 
         .nIn(numHiddenNodes) 
         .nOut(numOutputs) 
         .build()) 
       .pretrain(false).backprop(true).build(); 

     MultiLayerNetwork model = new MultiLayerNetwork(conf); 
     model.init(); 
     model.setListeners(new ScoreIterationListener(10)); 

     for(int i = 0; i < nEpochs; i++) 
      model.fit(trainIter); 

     System.out.println("Evaluate model......."); 
     Evaluation eval = new Evaluation(numOutputs); 
     while(testIter.hasNext()) 
     { 
      DataSet t = testIter.next(); 
      INDArray features = t.getFeatureMatrix(); 
      INDArray lables = t.getLabels(); 
      INDArray predicted = model.output(features,false); 
      eval.eval(lables,predicted); 
     } 
     System.out.println(eval.stats()); 
    } 
} 

次の簡単なプログラムを書きました。これはdl4jのよく知られたチュートリアルであるhttps://www.youtube.com/watch?v=8EIBIfVlgmU&t=1063sのコピーです。

しかし、コードはコンパイルされません。モデルにエラーが発生しました.SetListenerの行に、 "MultiLayerNetworkタイプのメソッドsetListeners(Collection)が引数(ScoreIterationListener)に適用されません"

"model.setListeners((Collection)new ScoreIterationListener(10)); "コンパイルエラーは消えますが、代わりにランタイムエラーが発生します。 "スレッド"のメイン "java.lang.ClassCastException例外:org.deeplearning4j.optimize.listeners.ScoreIterationListenerはjava.util.Collectionにキャストできません。 MLPClassifierLinear.main( MLPClassifierLinear.java:71)」何が起こっている

? dl4jの経験があれば誰でもこの問題を解決できますか?

答えて

0

私たちの例から開始し、あなたが最新バージョン(これを書いているとして、0.7.2)を使用していることを確実にするでしょう: https://github.com/deeplearning4j/dl4j-examples

MultiLayerNetwork.setListenersはIterationListener上の変数引数を持っています https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j-nn/src/main/java/org/deeplearning4j/nn/multilayer/MultiLayerNetwork.java#L1232

私は本当の根本的な原因が何か他のものかもしれないと感じていますか?

+0

他にもあります。私はそれを回り込み、java.lang.ClassNotFoundException:org.bytedeco.javacpp.openblas例外を取得しようとしています。私のdl4jのインストールでは何も間違っていないと推測します。 –

+0

CSVExampleは機能しません。 「java.lang.ClassNotFoundException:org.bytedeco.javacpp.openblas」とも言います –

+0

問題を提出できますか?私は明らかにここに何か不足しています:https://github.com/deeplearning4j/dl4j-examples/issues 私たちは私たちのgitterチャンネルでこれを実行していません。その例は正常に動作します。 –

関連する問題