java - 用于两类逻辑回归模型的 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。
你会如何建议我改进我的设置/模型?
提前感谢您的任何建议。
解决方案
除非您有特定目标,否则我会避免为您的模型设置分布。这会极大地影响模型的性能。默认的 XAVIER 适用于大多数用例。
您通常也不希望模型权重在 0 和 1 之间初始化。这太大了,会阻止模型学习。
逻辑回归也不是您在此处介绍的内容。您创建了一个 3 层 MLP。如果您只想进行逻辑回归,那将是一个带有 softmax 或 sigmoid 的 1 层神经网络。这应该会大大简化您的调整。
值得注意的是,当您进一步了解时,数据的规范化也很重要。
最后,对于您的数据设置,请确保您的标签分别为 0 和 1。如果输出上有 sigmoid,则需要 1 个输出为 0 或 1。如果有 2,则需要 2 列 0/1,其中 1 是标签。1 的列索引将是您想要的目标标签。
推荐阅读
- batch-file - 批量删除另一个字符串中特定字符串之前的所有内容
- matlab - 带有矩阵的matlab矩形图
- sql - 如何将金额、借方、贷方和余额排列在 1 行中
- r - 如何使用 dplyr 对不同的分组应用相同的功能?
- python - Python:检查每个用户的唯一类别
- c# - 在 ToolStripItem 菜单项上设置位置可访问性信息
- azure - 带有 Docker 映像错误的 Azure Functions:无法访问 Azure Functions 运行时
- numpy - 无法弄清楚为什么我会收到此错误。|TypeError: unsupported operationand type(s) for /: 'list' and 'int'
- javascript - 当文本区域的选择/光标位置发生变化时,是否有事件会告诉我?
- c# - 如何为单个 ListView 创建多个适配器?