Java 在CNN中使用LibSVM文件的困难

Java 在CNN中使用LibSVM文件的困难,java,deep-learning,sparse-matrix,libsvm,deeplearning4j,Java,Deep Learning,Sparse Matrix,Libsvm,Deeplearning4j,我正在使用LibSVM记录阅读器将稀疏数据加载到神经网络中 当使用MLP模型时,这很好,但当我尝试将数据加载到其中一个问题中给出的示例CNN中时: ComputationGraphConfiguration config = new NeuralNetConfiguration.Builder() .trainingWorkspaceMode(WorkspaceMode.SINGLE).inferenceWorkspaceMode(WorkspaceMode.SINGLE

我正在使用LibSVM记录阅读器将稀疏数据加载到神经网络中

当使用MLP模型时,这很好,但当我尝试将数据加载到其中一个问题中给出的示例CNN中时:

ComputationGraphConfiguration config = new NeuralNetConfiguration.Builder()
            .trainingWorkspaceMode(WorkspaceMode.SINGLE).inferenceWorkspaceMode(WorkspaceMode.SINGLE)
            //.trainingWorkspaceMode(WorkspaceMode.SEPARATE).inferenceWorkspaceMode(WorkspaceMode.SEPARATE)
            .weightInit(WeightInit.RELU)
            .activation(Activation.LEAKYRELU)
            .updater(Updater.ADAM)
            .convolutionMode(ConvolutionMode.Same)
            .regularization(true).l2(0.0001)
            .learningRate(0.01)
            .graphBuilder()
            .addInputs("input")
            .addLayer("cnn3", new ConvolutionLayer.Builder()
                .kernelSize(3, vectorSize)
                .stride(1, vectorSize)
                .nIn(1)
                .nOut(cnnLayerFeatureMaps)
                .build(), "input")
            .addLayer("cnn4", new ConvolutionLayer.Builder()
                .kernelSize(4, vectorSize)
                .stride(1, vectorSize)
                .nIn(1)
                .nOut(cnnLayerFeatureMaps)
                .build(), "input")
            .addLayer("cnn5", new ConvolutionLayer.Builder()
                    .kernelSize(5, vectorSize)
                    .stride(1, vectorSize)
                    .nIn(1)
                    .nOut(cnnLayerFeatureMaps)
                    .build(), "input")
            .addVertex("merger", new MergeVertex(), "cnn3", "cnn4", "cnn5")
            .addLayer("globalPool", new GlobalPoolingLayer.Builder()
                    .poolingType(globalPoolingType)
                    .dropOut(0.5)
                    .build(), "merger")
            .addLayer("out", new OutputLayer.Builder()
                    .lossFunction(LossFunctions.LossFunction.MCXENT)
                    .activation(Activation.SOFTMAX)
                    .nIn(3*cnnLayerFeatureMaps)
                    .nOut(classes.length)
                    .build(), "globalPool")
            .setOutputs("out")
            .setInputTypes(InputType.convolutionalFlat(32,45623,1))
            .build();
我得到一个错误,似乎是说它得到的是二维数据,但它需要三维数据(第三维是一个微不足道的)

我如何给它1通道尺寸

如果做不到这一点,我如何让CNN识别无通道数据,或者如何给CNN提供稀疏数据


谢谢

设置CNN时遇到的典型问题是输入类型设置错误。Deeplearning4j相当于“输入层”,是一种输入类型,我们根据您处理的数据类型配置常见配置,如RNN或cnn平面。通常,如果您使用的是CNN,则需要查看InputType.convolutionalFlat 方法


这将得到一个平面向量,并将其转换为一个适合CNN使用的单通道张量。如果您使用输入类型,它还会自动为您设置输入和输出的数量。

我想我刚刚意识到这很愚蠢。。。为什么我要使用这样的CNN…请随时在DL4J支持频道上提问:gitter.im/deeplearning4j/deeplearning4j
Exception in thread "main" java.lang.IllegalArgumentException: Invalid input: expect output columns must be equal to rows 32 x columns 45623 x channels 1 but was instead [32, 45623]