当前位置: 首页 > 知识库问答 >
问题:

DL4J-无法获得非2D矩阵的行数

夹谷星剑
2023-03-14

我目前使用nd4j和dl4j来实现一些深度学习算法。然而,我不能让datavec+dl4j工作在第一位。

以下是我的图像转换器:

public class ImageConverter {

    private static Logger log = LoggerFactory.getLogger(ImageConverter.class);

    public DataSetIterator Convert() throws IOException, InterruptedException {
        log.info("Start to convert images...");

        File parentDir = new File(System.getProperty("user.dir"), "src/main/resources/images/");
        ParentPathLabelGenerator parentPathLabelGenerator = new ParentPathLabelGenerator();

        ImageRecordReader recordReader = new ImageRecordReader(28,28,1,parentPathLabelGenerator);

        FileSplit fs = new FileSplit(parentDir);
        InputSplit[] filesInDirSplit = fs.sample(null, 100);

        recordReader.initialize(filesInDirSplit[0]);
        DataSetIterator dataIter = new RecordReaderDataSetIterator(recordReader, 2, 1, 2);

        log.info("Image convert finished.");

        return dataIter;
    }

}

下面是主要类:

ImageConverter icv = new ImageConverter();
        DataSetIterator dataSetIterator = icv.Convert();

        log.info("Build model....");
        int numEpochs = 10;

        MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
              .seed(123)
              .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
              .iterations(1)
              .learningRate(0.006)
              .updater(Updater.NESTEROVS).momentum(0.9)
              .regularization(true).l2(1e-4)
              .list()
              .layer(0, new ConvolutionLayer.Builder(5, 5)
                      .nIn(28 * 28)
                      .stride(1, 1)
                      .nOut(20)
                      .activation("identity")
                      .build())
              .layer(1, new OutputLayer.Builder(LossFunction.NEGATIVELOGLIKELIHOOD)
                      .nIn(24 * 24)
                      .nOut(2)
                      .activation("softmax")
                      .build())
              .pretrain(false)
              .backprop(true)
              .build();

        MultiLayerNetwork model = new MultiLayerNetwork(conf);
        model.init();
        model.setListeners(new ScoreIterationListener(1));


        log.info("Train model....");
        for( int i=0; i<numEpochs; i++ ){
            model.fit(dataSetIterator);
        }
[[[...],
...
]]

=================OUTPUT==================
[[1.00, 0.00],
 [1.00, 0.00]]
[[[[...],
...
]]]

=================OUTPUT==================
[1.00, 0.00]
[[...]...]
=================OUTPUT==================
[[0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00],
...]

从中我推断返回DataSetiterator包含格式错误的数据。

有人知道怎么修吗?

共有1个答案

靳彦
2023-03-14

我们已经在我们的示例中为您实现了这一点。

4D和2D对我们来说并不重要,只需指定卷积层设置:https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/convolution/lenetMnistexample.java#l84

如果你再面临麻烦,在你认为讨论会更容易的地方,来我们的gitter:https://gitter.im/deeplearning4j/deeplearning4j

 类似资料:
  • 问题内容: 我正在自学一些Java,并且坚持创建2D数组,该数组使用随机值对其进行初始化,然后创建该数组的转置。 示例输出为: 原始矩阵 转置矩阵 ^应该是最终输出。代码的一些帮助将不胜感激! 如果行或列的数量超出指定范围,我想编写代码以生成错误消息。以及是否从命令行读取矩阵元素而不是随机生成它们。 问题答案: 这是返回转置矩阵的int [] []的简单方法… 比起打印二维矩阵,您可以使用如下方法

  • 问题内容: 这个问题已经在这里有了答案 : 删除零线2-D numpy数组 (3个答案) 4年前关闭。 是否有一个有效的和/或内置的函数来删除2d数组的全零行?我正在查看numpy文档,但尚未找到。 问题答案: 布尔索引可以做到这一点:

  • 它包含5列 另一个INDArray有1列,它是 对于那些熟悉MatLab的人,我现在可以使用:

  • 问题内容: 在这里,使用hdf5进行矩阵乘法时,我使用hdf5(pytables)进行大型矩阵乘法,但令我惊讶的是,使用hdf5比使用普通numpy.dot更快,并且将矩阵存储在RAM中,这种行为的原因是什么? 也许在python中有一些更快的矩阵乘法功能,因为我仍然使用numpy.dot进行小块矩阵乘法。 这是一些代码: 假设矩阵可以容纳在RAM中:在10 * 1000 x 1000的矩阵上进行

  • 本文向大家介绍python 判断矩阵中每行非零个数的方法,包括了python 判断矩阵中每行非零个数的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 经过多次验证, 第四种实现方式的事件效率最高! 以上这篇python 判断矩阵中每行非零个数的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我想用jqmath编写表(矩阵),但输出不正确 我复制jqmath示例 这是我的代码: 输出是如下所示的线性矩阵: 我建议在"var s = '$( \表\cos θ, - \sinθ;\sinθ,\cosθ)"中结合斜杠和t(\t)会导致这个问题,因为t字符不见了,第一行向右移动。 我怎样才能解决这个问题? 解决了如果我用4个斜杠替换每个斜杠,结果是正确的。。。。