我正在训练一个简单的反向传播神经网络,但我使用 Neuroph 框架只得到了 0.0 或 1.0



我有一个使用neuroph java框架创建的神经网络。该网络有 2 个输入神经元、1 个输出和 2 个带有 8 个神经元的隐藏层。我正在尝试创建一个简单的网络来测试。

        ds.addRow(new DataSetRow(new double[] {0.1, 0.1}, new double[] {0.1}));
    ds.addRow(new DataSetRow(new double[] {0.2, 0.2}, new double[] {0.2}));
    ds.addRow(new DataSetRow(new double[] {0.3, 0.3}, new double[] {0.3}));
    ds.addRow(new DataSetRow(new double[] {0.4, 0.4}, new double[] {0.4}));
    ds.addRow(new DataSetRow(new double[] {0.5, 0.5}, new double[] {0.5}));
    ds.addRow(new DataSetRow(new double[] {0.6, 0.6}, new double[] {0.6}));
    ds.addRow(new DataSetRow(new double[] {0.7, 0.7}, new double[] {0.7}));
    ds.addRow(new DataSetRow(new double[] {0.8, 0.8}, new double[] {0.8}));
    ds.addRow(new DataSetRow(new double[] {0.9, 0.9}, new double[] {0.9}));
    ds.addRow(new DataSetRow(new double[] {1.0, 1.0}, new double[] {1.0}));
    BackPropagation backPropagation = new BackPropagation();
    backPropagation.setMaxIterations(100000);
    backPropagation.setMaxError(0.0075);
    backPropagation.setMomentum(0.10);
    backPropagation.setLearningRate(0.30);

从代码中可以看出,这是一个非常简单的网络,其中第一组双精度是输入,最后一组是正确的输出,因此输入 0.3、0.3 应该给出 0.3 等。但是,在运行它时,并且在训练它之后,当我输入不同的输入时,我要么得到 0.0 要么得到 1.0(主要是 1.0,当它是 0.0 时,0.0 我得到 0 返回(?为什么?为什么中间什么都没有。

问题是我在这里使用的神经网络是一个简单的感知器网络,这是一个很好的监督学习网络和一个线性分类器,这意味着它只会输出 1 或 0。对于此用例,多层感知器是更好的网络,因为它可以提供 0 和 1 之间的输出。

下面是一个使用 Neuroph Java 框架的代码示例。

MultiLayerPerceptron ann = new MultiLayerPerceptron(TransferFunctionType.LINEAR, 1, 3, 1); 
ann.learn(ds);
其中1是输入层的神经元数量,

隐藏层是3个神经元,最后1是输出层中的神经元数量。然后只需将数据集添加到网络中即可学习。

最新更新