Neural network I';我训练一个简单的反向传播神经网络,但我';m使用Neuroph框架只能得到0.0或1.0

Neural network I';我训练一个简单的反向传播神经网络,但我';m使用Neuroph框架只能得到0.0或1.0,neural-network,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

我用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返回)?为什么呢?为什么没有介于两者之间。

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

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

MultiLayerPerceptron ann = new MultiLayerPerceptron(TransferFunctionType.LINEAR, 1, 3, 1); 
ann.learn(ds);
其中1是输入层的神经元数量,3个神经元是隐藏层,最后1个是输出层的神经元数量。 然后简单地将数据集添加到网络中进行学习