2017-02-01 46 views
0

我正在尝试deeplearning4j中用于文本处理的时间预测模型,该模型不采用单词,句子,字符作为输入特征并生成时间作为输出。但是在建模输入数据以输出时,我难以转换这些值,以及如何告知网络这些输入值,这些是相应的输出值。在神经网络中将训练数据转换为数组

此外,我应该减少维度只有x1和y.inside的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]

回答