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

时间:2019-06-13 15:46:45

标签: neural-network

我有一个使用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);

从代码中可以看到,这是一个非常简单的网络,其中第一组double是输入,最后一组是正确的输出,因此输入0.3、0.3应该给出0.3等。 但是,在运行它并对其进行训练之后,当我输入不同的输入时,我得到的是0.0还是1.0(大多数情况下是1.0,当它是0.0时,则返回0.0,则我得到0)?这是为什么?为什么两者之间什么也没有。

1 个答案:

答案 0 :(得分:0)

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

这是使用Neuroph Java Framework的代码示例。

MultiLayerPerceptron ann = new MultiLayerPerceptron(TransferFunctionType.LINEAR, 1, 3, 1); 
ann.learn(ds);

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