【问题标题】:DeepLearning4J Problems with INDArrayINDArray 的 DeepLearning4J 问题
【发布时间】:2021-04-26 11:08:26
【问题描述】:
    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;
    }
}

我使用 INDArray input = Nd4j.create(f); 创建 INDArray,但这个 m1.output(input) 引发以下异常:

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)

我不明白为什么创建的 INDArray 是二维的以及 63 来自哪里..

编辑: 多层网络配置:

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();

【问题讨论】:

  • 您好,我们需要更多信息来帮助您。你能给出神经网络架构吗?
  • 好的,我编辑了我的问题,我希望这是你对建筑的看法

标签: java deeplearning4j


【解决方案1】:

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

如果您不熟悉神经网络,请了解基本的二维神经网络具有指定的输入和输出数量。下一层的输入数量应与上一层的输出数量相匹配。

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

这里需要注意的是,为神经网络的每一层设置输入和输出的数量可能容易出错。相反,只需设置每层的输出数量,并使用 dl4j 的 setInputType api 代替列数。 在您的情况下添加 InputType.feedforward(https://github.com/eclipse/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-nn/src/main/java/org/deeplearning4j/nn/conf/inputs/InputType.java#L107)

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();

更多示例(主要是 cnns)在这里:https://github.com/eclipse/deeplearning4j-examples/search?q=setInputType

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2015-12-23
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多