2017-02-01 15 views
0

Я пытаюсь использовать модель предсказания времени в deeplearning4j для обработки текста, которая не принимает слов, предложений, символов в качестве входных функций и производит время как выход. Но пока моделирование входных данных для вывода я с трудностями для преобразования этих значений и того, как рассказать сети для этих значений ввода, являются соответствующие выходные значения.Преобразование данных обучения в массив в нейронной сети

Также следует уменьшить размерность только от x1 и y.inst x1-x4?

training-data.csv имеет следующие столбцы со 100 значениями. x1, x2, x3, x4 (входы) y (выход)

Я попытался использовать SequenceRecorder и Iterator, которые могут захватывать варианты входов. ниже мой код

public static void main(String[] args) throws Exception 
{ 
    // Initlizing parametres 
    final Logger log = LoggerFactory.getLogger(MainExpert.class); 
    final int seed =123; 
    final int numInput = 4; 
    final int numOutput = 1; 
    final int numHidden = 20; 
    final double learningRate = 0.015; 
    final int batchSize =30; 
    final int nEpochs =30; 
    //final int inputFeatures =4; 

    //Constructing Training data 

    final File baseFolder =new File("/home/aj/my/samples/corpus"); 
    final File testFolder = new File("/home/aj/my/samples/corpus/train_data_0.csv"); 
    SequenceRecordReader trainReader = new CSVSequenceRecordReader(0,","); 
    trainReader.initialize(new NumberedFileInputSplit(baseFolder.getAbsolutePath() + "/train_data_%d.csv",0,0)); 
    DataSetIterator trainIterator = new SequenceRecordReaderDataSetIterator(trainReader,batchSize,-1,4,true); 


    SequenceRecordReader testReader = new CSVSequenceRecordReader(0,","); 
    testReader.initialize(new NumberedFileInputSplit(baseFolder.getAbsolutePath() + "/test_data_%d.csv",0,0)); 
    DataSetIterator testIterator = new SequenceRecordReaderDataSetIterator(testReader,batchSize,-1,4,true); 

    DataSet trainData = trainIterator.next(); 
    System.out.println(trainData); 
    DataSet testData = testIterator.next(); 

    NormalizerMinMaxScaler normalizer = new NormalizerMinMaxScaler(0, 1); 
    normalizer.fitLabel(true); 
    normalizer.fit(trainData);    
    normalizer.transform(trainData); 
    normalizer.transform(testData); 

    //Configuring Network 
    log.info("Building Model"); 
    MultiLayerConfiguration config = new NeuralNetConfiguration.Builder() 
      .seed(seed) 
      .iterations(1) 
      .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) 
      .learningRate(learningRate) 
      .updater(Updater.NESTEROVS).momentum(0.9) 
      .list() 
      .layer(0, new DenseLayer.Builder() 
        .nIn(numInput) 
        .nOut(numHidden) 
        .weightInit(WeightInit.XAVIER). 
        activation(Activation.RELU) 
        .build()) 
      .layer(1, new DenseLayer.Builder() 
        .nIn(numHidden) 
        .nOut(numHidden) 
        .weightInit(WeightInit.XAVIER) 
        .activation(Activation.RELU) 
        .build()) 
      .layer(2, new OutputLayer.Builder(LossFunction.MSE) 
        .nIn(numHidden) 
        .nOut(numOutput) 
        .weightInit(WeightInit.XAVIER) 
        .activation(Activation.IDENTITY) 
        .build()) 
      .pretrain(false).backprop(true).build(); 

    //Initializing network 
    log.info("initlizing model"); 
    MultiLayerNetwork model = new MultiLayerNetwork(config); 
    model.init(); 
    model.setListeners(new ScoreIterationListener(1)); 

    log.info("Training Model"); 
    for(int i=0;i<nEpochs;i++) 
    { 
     model.fit(trainData); 
    } 
    //Evaluation 
    RegressionEvaluation reval=new RegressionEvaluation(1); 

     while(testIterator.hasNext()) 
     { 
    INDArray feat =testData.getFeatureMatrix(); 
    INDArray labels =testData.getLabels(); 
    INDArray prediction =model.output(feat); 
    reval.eval(labels, prediction); 
} 
    System.out.println(reval.stats()); 
} 

}

мои данные имеют четыре входных значений и выходные значения, один. Но я получаю исключение org.deeplearning4j.exception.DL4JInvalidInputException: Input that is not a matrix; expected matrix (rank 2), got rank 3 array with shape [1, 4, 107]

ответ

0

У нас есть встык Csv классификатор пример здесь: https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/recurrent/seqClassification/UCISequenceClassificationExample.java РНН может работать с множеством входов и варьировать. На самом деле я поощряю это. Наличие только 1 функции ввода не делает для вас многого. Я не вижу необходимости сводить его до x1 и y.