“如何解决'无法解析方法'迭代和getFeatureMatrix''?

时间:2019-08-08 10:15:52

标签: dl4j

“我是神经网络和DL4j的新手,我想用CSV训练神经网络并建立线性回归。如何解决这些错误“无法解析method'.iterations和getFeatureMatrix()'”? >


“以前我曾尝试这样做,但是'seed'出现另一个错误。”

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.evaluation.classification.Evaluation;
import org.nd4j.linalg.activations.Activation;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.dataset.api.DataSet;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import org.nd4j.linalg.lossfunctions.LossFunctions;
import java.io.File;






public class Data {
    public static void main(String[] args) throws Exception {

参数:

        int seed = 3000;
        int batchSize = 200;
        double learningRate = 0.001;
        int nEpochs = 150;
        int numInputs = 2;
        int numOutputs = 2;
        int numHiddenNodes = 100;

加载数据:

        //load data train
        RecordReader rr = new CSVRecordReader();
        rr.initialize(new FileSplit(new File("train.csv")));
        DataSetIterator trainIter = new RecordReaderDataSetIterator(rr, batchSize, 0, 2);

        //load test data

        RecordReader rrTest = new CSVRecordReader();
        rr.initialize(new FileSplit(new File("test.csv")));


        DataSetIterator testIter = new RecordReaderDataSetIterator(rrTest, batchSize, 0, 2);

网络配置:

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

        MultiLayerNetwork model = new MultiLayerNetwork(conf);
        model.init();
        model.setListeners(new ScoreIterationListener((15)));
        for (int n = 0; n < nEpochs; n++) {
            model.fit((trainIter));
            System.out.println(("--------------eval model"));
            Evaluation eval = new Evaluation(numOutputs);
            while (testIter.hasNext()) {
                DataSet t = testIter.next();
                INDArray features = getFeatureMatrix();
                INDArray lables = t.getLabels();
                INDArray predicted = model.output(features, false);
                eval.eval(lables, predicted);
            }
            System.out.println(eval.stats());
        }
    }
}

日志

Build

1 个答案:

答案 0 :(得分:0)

首先,您应该考虑使用更多的类(例如用于定义神经网络的类,用于训练过程的类,等等)。只是一个最佳实践的东西。

我不知道您使用的是哪个版本的DL4J,但我们可以注意到 getFeatureMatrix() has been removed。还有一件事是,应该在DataSet对象上调用此函数,而不是像看起来那样“静态地”调用它。 (您应该执行t.getFeatureMatrix())。

关于神经网络创建的iterations()函数,这几乎是相同的。自某些DL4J版本以来,此功能has been removed。您可以获得有关此功能on this thread的更多信息。现在,您必须找到一种设置迭代次数的方法,您可以看看this thread。希望它能回答您的问题!