我有一个使用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是输出层中的神经元数量。然后只需将数据集添加到网络中即可学习。