2016-08-30 10 views
0

私はdeeplearning4jを使用してニューラルネットワークを訓練しようとしています。私のデータはcsvファイルである、それは64個の番号(値0,1,2,3)と1000年に値-1000のラベル(フロートだDeeplearning4j:線形インデックス=> 1を取得できません

java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:294) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.IllegalArgumentException: Unable to get linear index >= 1 
    at org.nd4j.linalg.api.ndarray.BaseNDArray.getDouble(BaseNDArray.java:3275) 
    at org.deeplearning4j.eval.Evaluation.eval(Evaluation.java:197) 
    at mypackage.myclass.main(Learn.java:77) 

:しかし、私は、私が説明することはできません。このエラーメッセージが表示されます)。例えば

2,3,2,2,1,1,2,3,0,1,1,2,3,1,1,0,0,0,2,2,0,0,3,1,0,1,3,1,1,1,2,2,2,2,2,2,3, 2,2,2,2,3,3,1,2,2,1,3,0,0,2,3,2,3,2,0,0,3,0,1,1,3,3,2,-228.0 

私はcsvファイルをロードし、ネットワークを訓練するために、このコードを使用します。

RecordReader recordReader = new CSVRecordReader(0, ","); 
recordReader.initialize(new FileSplit(new File("data.csv"))); 

DataSetIterator iterator = new RecordReaderDataSetIterator(recordReader, new DoubleWritableCo nverter(), 600000, 64, 64, true); 

    DataSet allData = iterator.next(); 
    SplitTestAndTrain testAndTrain = allData.splitTestAndTrain(0.9); 

    DataSet trainingData = testAndTrain.getTrain(); 
    DataSet testData = testAndTrain.getTest(); 

    //We need to normalize our data. We'll use NormalizeStandardize (which gives us mean 0, unit  variance): 
    DataNormalization normalizer = new NormalizerStandardize(); 
    normalizer.fit(trainingData);   //Collect the statistics (mean/stdev) from the traini ng data. This does not modify the input data 
    normalizer.transform(trainingData);  //Apply normalization to the training data 
    normalizer.transform(testData);   //Apply normalization to the test data. This is using  statistics calculated from the *training* set 
    long seed = 123; 
    int inputNum = 64; 
    int hiddenNum = 64; 
    int outputNum = 1; 
    int iterations = 1; 

    MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder() 
     .seed(seed) 
     .activation("tanh") 
     .iterations(iterations) 
     .weightInit(WeightInit.XAVIER) 
     .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) 
     .learningRate(0.1) 
     .regularization(true).l2(1e-4) 
     .list() 
     .layer(0, new DenseLayer.Builder().nIn(inputNum).nOut(hiddenNum).build()) 
     .layer(1, new OutputLayer.Builder(LossFunctions.LossFunction.MSE) 
      .activation("identity") 
      .nIn(hiddenNum).nOut(outputNum).build()) 
     .backprop(true).pretrain(false) 
     .build(); 
    MultiLayerNetwork model = new MultiLayerNetwork(conf); 
    model.init(); 
    model.setListeners(new ScoreIterationListener(100)); 

    model.fit(trainingData); 

    //evaluate the model on the test set 
    Evaluation eval = new Evaluation(2); 
    INDArray output = model.output(testData.getFeatureMatrix()); 
    eval.eval(testData.getLabels(), output); <---- this is line 77, where the error occurs 
    System.out.println(eval.stats()); 
    recordReader.close(); 

このエラーは何を意味し、私はこれをどのように修正することができますか?

+0

'BaseNDArray'のコードはありますか? – bradimus

+0

@bradimus、コードはここにあります:https://github.com/deeplearning4j/nd4j/blob/nd4j-0.5.0/nd4j-backends/nd4j-api-parent/nd4j-api/src/main/java/org /nd4j/linalg/api/ndarray/BaseNDArray.java#L3275 – Xeli

+0

出力ノードの数が可能なラベルよりも小さいためです。 – Xeli

答えて

1

評価用に2つのラベルを指定しています。回帰問題にevalを使用します。

評価は主に分類のためのものです。あなた自身の回帰評価を手渡す必要があります。

+0

ああ、意味があります。だから私の例では、ラベル-221のいくつかの機能を持っています、理想的にはネットワークはその番号を出力するでしょうか? – Xeli

関連する問題