1

トレーニングに使用するカスタム 7 (高さ) と 24 (幅) のマトリックス入力があります。出力は、年齢 (Young、Mature、Old) のラベルです。Deeplearning4J 畳み込みニューラル ネットワークを使用したいと考えています。

非常に基本的な畳み込みニューラル ネットワークを構築した後、最初のトレーニング項目で次のエラーが発生し、これが何であるかわかりません。

Exception in thread "main" java.lang.IllegalArgumentException: Invalid size index 2 wher it's >= rank 2
at org.nd4j.linalg.api.ndarray.BaseNDArray.size(BaseNDArray.java:4066)
at org.deeplearning4j.nn.layers.convolution.ConvolutionLayer.preOutput(ConvolutionLayer.java:192)
at org.deeplearning4j.nn.layers.convolution.ConvolutionLayer.activate(ConvolutionLayer.java:247)
at org.deeplearning4j.nn.graph.vertex.impl.LayerVertex.doForward(LayerVertex.java:88)
at org.deeplearning4j.nn.graph.ComputationGraph.feedForward(ComputationGraph.java:983)
at org.deeplearning4j.nn.graph.ComputationGraph.computeGradientAndScore(ComputationGraph.java:889)

私のDL4Jコード

//Model Config here
MultiLayerConfiguration.Builder builder = new NeuralNetConfiguration.Builder()
    .seed(seed)
    .iterations(iterations)
    .regularization(true).l2(0.0005)
    .learningRate(0.01)//.biasLearningRate(0.02)
    //.learningRateDecayPolicy(LearningRatePolicy.Inverse).lrPolicyDecayRate(0.001).lrPolicyPower(0.75)
    .weightInit(WeightInit.XAVIER)
    .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
    .updater(Updater.NESTEROVS).momentum(0.9) 
    .list()
    .layer(0, new ConvolutionLayer.Builder(4, 1)
        //nIn and nOut specify depth. nIn here is the nChannels and nOut is the number of filters to be applied
            .name("hzvt1")
        .nIn(nChannels)
        .stride(1, 1)
        .nOut(26)
        .activation("relu")//.activation("identity")
        .build())
    .layer(1, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
        .nOut(outputNum)
        .activation("softmax")
        .build())  
    .setInputType(InputType.convolutional(nChannels,height,width))
    .backprop(true).pretrain(false);

//Model build here            
model.fit(wmTrain);MultiLayerConfiguration conf = builder.build();
model.fit(wmTrain);MultiLayerNetwork model = new MultiLayerNetwork(conf);
model.init();            

//Training data creation here 
INDArray weekMatrix = Nd4j.ones(DLAgeGender.nChannels,DLAgeGender.height*DLAgeGender.width);       
double[] vector = new double[] { 0.0, 1.0, 0.0 };
INDArray intLabels = Nd4j.create(vector);
DataSet ds=new DataSet(weekMatrix,intLabels);
//Train the first item
model.fit(wmTrain);

DL4J バージョン 0.6、Java バージョン 1.8、maven 3.3+ を使用しています

ライブラリのバグが疑われます。

4

1 に答える 1

1

ジッターサポートの助けを借りて。モデルと入力が一致していないことがわかりました。正しい作業コードは次のとおりです。

これらの DL4J エラー/例外メッセージが次のリリースでより明確になることを願っています。

log.info("Build model....");
System.out.println("Building model...");
MultiLayerConfiguration.Builder builder = new NeuralNetConfiguration.Builder()
        .seed(seed)
        .iterations(iterations)
        .regularization(true).l2(0.0005)
        .learningRate(0.01)//.biasLearningRate(0.02)
        //.learningRateDecayPolicy(LearningRatePolicy.Inverse).lrPolicyDecayRate(0.001).lrPolicyPower(0.75)
        .weightInit(WeightInit.XAVIER)
        .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
        .updater(Updater.NESTEROVS).momentum(0.9)
        .list()
        .layer(0, new ConvolutionLayer.Builder(4, 1)
            //nIn and nOut specify depth. nIn here is the nChannels and nOut is the number of filters to be applied
            .name("hzvt1")
            .nIn(nChannels)
            .stride(1, 1)
            .nOut(26)
            .activation("relu")//.activation("identity")
            .build())
        .layer(1, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
            .nOut(classes)
            .activation("softmax")
            .build())
        .setInputType(InputType.convolutional(height,width,nChannels))
        .backprop(true).pretrain(false);

//Model build here            
model.fit(wmTrain);MultiLayerConfiguration conf = builder.build();
model.fit(wmTrain);MultiLayerNetwork model = new MultiLayerNetwork(conf);
model.init();            

//Training data creation here 
    INDArray weekMatrix = Nd4j.ones(new int[]{1,DLAgeGender.nChannels,DLAgeGender.height,DLAgeGender.width});
    INDArray intLabels;
    double[] vector = new double[] { 0.0, 1.0, };
    intLabels = Nd4j.create(vector);
DataSet ds=new DataSet(weekMatrix,intLabels);

log.info("Train model....");
model.setListeners(new ScoreIterationListener(1));
model.fit(wmTrain);
System.out.println("Data train OK.");
于 2016-11-10T07:03:30.060 に答える