我有一个神经网络,它是使用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);正如您从代码中看到的,这是一个非常简单的网络,其中第一组doubles是输入,最后一组是正确的输出,因此输入0.3,0.3应该是0.3等等。但是,在运行它时,在训练它之后,当我输入不同的输入时,我会得到0.0或1.0 (大多数情况下是1.0,当它是0.0时,0.0我返回0)?为什么会这样呢?为什么没有中间的东西。
发布于 2019-06-14 20:52:02
问题是我在这里使用的神经网络是一个简单的感知器网络,这是一个很好的监督学习网络和线性分类器,这意味着它只会输出1或0。对于这个用例,多层感知器是一个更好的网络,因为它可以提供0到1之间的输出。
下面是一个使用Neuroph Java框架的代码示例。
MultiLayerPerceptron ann = new MultiLayerPerceptron(TransferFunctionType.LINEAR, 1, 3, 1);
ann.learn(ds);其中1是输入层的神经元数,3是隐藏层的神经元数,最后1是输出层的神经元数。然后简单地将数据集添加到网络中进行学习。
https://stackoverflow.com/questions/56584209
复制相似问题