Java 利用INDArray深入学习4J问题

Java 利用INDArray深入学习4J问题,java,deeplearning4j,Java,Deeplearning4j,我使用INDArray input=Nd4j.create(f)创建INDArray,但此m1。输出(输入)引发以下异常: public void playFullGame(MultiLayerNetwork m1, MultiLayerNetwork m2) { boolean player = false; while (!this.isOver) { float[] f = Main.rowsToInput(this.rows); S

我使用
INDArray input=Nd4j.create(f)
创建INDArray,但此
m1。输出(输入)
引发以下异常:

    public void playFullGame(MultiLayerNetwork m1, MultiLayerNetwork m2) {
    boolean player = false;
    while (!this.isOver) {
        float[] f = Main.rowsToInput(this.rows);
        System.out.println(f.length);// prints 42
        INDArray input = Nd4j.create(f);
        this.addChip(Main.getHighestOutput(player ? m1.output(input) : m2.output(input)), player);
        player = !player;
    }
}
我不明白为什么创建的INDARY是二维的,63是从哪里来的

编辑: 多层网络配置:

Exception in thread "AWT-EventQueue-0" org.deeplearning4j.exception.DL4JInvalidInputException: Input size (63 columns; shape = [1, 63]) is invalid: does not match layer input size (layer # inputs = 42) (layer name: layer2, layer index: 2, layer type: OutputLayer)

你的63来自神经网络本身。输入和输出的数量存在形状不匹配

如果您是神经网络新手,只需了解基本2d神经网络有许多指定的输入和输出。下一层的输入数量应与上一层的输出数量相匹配

对于密集层,第一层中的输入数量需要与数据集中的输入列数量相匹配。我会确保无论你的数据集是多少列匹配

这里需要注意的是,为神经网络的每一层设置输入和输出的数量可能容易出错。相反,只需设置每个层的输出数量,并使用dl4j的setInputType api来代替列数。 在您的案例中,添加InputType.feedforward()


这里有更多的例子(主要是CNN):

您好,我们需要更多的信息来帮助您。你能给出神经网络架构吗?好的,我编辑了我的问题,我希望这就是你对架构的理解
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
            .seed(randSeed).optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
            .updater(new Nesterovs(0.1, 0.9)).list()
            .layer(new DenseLayer.Builder().nIn(numRows * numColums).nOut(63).activation(Activation.RELU)
                    .weightInit(WeightInit.XAVIER).build())
            .layer(new DenseLayer.Builder().nIn(63).nOut(63).activation(Activation.RELU)
                    .weightInit(WeightInit.XAVIER).build())
            .layer(new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD).nIn(numRows * numColums).nOut(7)
                    .activation(Activation.SOFTMAX).weightInit(WeightInit.XAVIER).build())
            .build();
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
            .seed(randSeed).optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
            .updater(new Nesterovs(0.1, 0.9)).list()
            .layer(new DenseLayer.Builder().nIn(numRows * numColums).nOut(63).activation(Activation.RELU)
                    .weightInit(WeightInit.XAVIER).build())
            .layer(new DenseLayer.Builder().nIn(63).nOut(63).activation(Activation.RELU)
                    .weightInit(WeightInit.XAVIER).build())
            .layer(new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD).nIn(numRows * numColums).nOut(7)
                    .activation(Activation.SOFTMAX).weightInit(WeightInit.XAVIER).build())
            .setInputType(InputType.feedForward(numRows * numColums))
            .build();