首页 > 解决方案 > 用于两类逻辑回归模型的 Deeplearning4J MultiLayerConfiguration 设置

问题描述

我正在尝试建立一个两类逻辑回归模型,但不确定类模型的最佳方法。

我正在处理如下所示的数据:

特色一 特征 b 特征 c ... 标签
0.85 0.2 0.4 1.0
0.05 0.3 0.1 0.0

具有范围 0-1 的特征和 0 或 1 的标签。

我目前正在使用这个 MultiLayerConfiguration:

private static final int FEATURES_COUNT = 30;
private static final int CLASSES_COUNT = 2; 
...

MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder().seed(12345)
        .updater(new Sgd(0.01))
        .seed(1)
        .biasInit(0)
        .list()
        .layer(new DenseLayer.Builder()
            .nIn(FEATURES_COUNT)
            .nOut(50)
            .activation(Activation.SIGMOID)
            .weightInit(new UniformDistribution(0, 1))
            .build())
        .layer(new DenseLayer.Builder()
            .nIn(50)
            .nOut(50)
            .activation(Activation.SIGMOID)
            .weightInit(new UniformDistribution(0, 1))
            .build())
        .layer(new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD)
            .nOut(2)
            .activation(Activation.SOFTMAX)
            .weightInit(new UniformDistribution(0, 1))
            .build())

这是构建模型的最佳方式吗?

此外,当运行几分钟时,模型仅预测标签 0。

   0   1
   ---------
   247   0 | 0 = 0
   253   0 | 1 = 1

我也可以根据需要生成尽可能多的数据,目前我使用的数据集为 6,000,批量大小为 500。

你会如何建议我改进我的设置/模型?

提前感谢您的任何建议。

标签: javaneural-networkartificial-intelligencedeeplearning4j

解决方案


除非您有特定目标,否则我会避免为您的模型设置分布。这会极大地影响模型的性能。默认的 XAVIER 适用于大多数用例。

您通常也不希望模型权重在 0 和 1 之间初始化。这太大了,会阻止模型学习。

逻辑回归也不是您在此处介绍的内容。您创建了一个 3 层 MLP。如果您只想进行逻辑回归,那将是一个带有 softmax 或 sigmoid 的 1 层神经网络。这应该会大大简化您的调整。

值得注意的是,当您进一步了解时,数据的规范化也很重要。

最后,对于您的数据设置,请确保您的标签分别为 0 和 1。如果输出上有 sigmoid,则需要 1 个输出为 0 或 1。如果有 2,则需要 2 列 0/1,其中 1 是标签。1 的列索引将是您想要的目标标签。


推荐阅读