使用带有 CNN 的 LibSVM 文件的 Deeplearning4j 困难
Posted
技术标签:
【中文标题】使用带有 CNN 的 LibSVM 文件的 Deeplearning4j 困难【英文标题】:Deeplearning4j difficulty using LibSVM files with CNNs 【发布时间】:2018-07-03 17:35:39 【问题描述】:我正在使用 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();
我收到一个错误,似乎是在说它正在获取 2 维数据,但它需要 3 维数据(第三维是一个微不足道的数据)。
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]
如何给它 1 个通道维度?
如果做不到这一点,如何让 CNN 识别无通道数据,或者如何提供 CNN 稀疏数据?
谢谢
【问题讨论】:
我想我刚刚意识到这很愚蠢...我为什么要使用这样的 CNN... 欢迎在 DL4J 支持频道提问:gitter.im/deeplearning4j/deeplearning4j 【参考方案1】:您在设置 cnns 时遇到的典型问题是输入类型设置错误。 Deeplearning4j 相当于“输入层”是一种输入类型,我们根据您正在处理的数据类型配置常见的配置,如 rnns 或 cnn flat。通常,如果您使用的是 cnns,则需要查看 InputType.convolutionalFlat 方法。
这将采用一个平面向量并将其转换为用于 cnns 的适当的 1 通道张量。如果您使用输入类型,它还会自动为您设置输入和输出的数量。
【讨论】:
以上是关于使用带有 CNN 的 LibSVM 文件的 Deeplearning4j 困难的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 matlab 中使用带有 libsvm 的预计算内核