2

我是 R 中神经网络的新手。我正在尝试模拟在 java 中使用神经网络实现的以下行为。

类型 - 多层感知器,输入 - 7,输出 - 1,隐藏 - 5 个神经元,传递函数 - sigmoid,学习规则 - 反向传播,最大误差 - 0.01,学习率 - 0.2

以下是我实现的 R 代码。

net.result <- neuralnet(Output ~ Input1 + Input2 + Input3 + Input4 + Input5 + Input6 + Input7, 
                        traindata, algorithm = "backprop", hidden = 5,
                        threshold = 0.01, learningrate = 0.2, act.fct = "logistic", 
                        linear.output = FALSE, rep =50, stepmax = 100)

数据相对较小(120 行),以下是使用的训练数据样本。请注意,输入已标准化并在 0 和 1 之间缩放。

     Input1 Input2 Input3 Input4 Input5 Input6 Input7       Output
 1   0      0      0      0      0      0      0            0
 2   0      0      0      0      0      1      0.0192307692 0
 3   0      0      0      0      1      0      0.125        0
 4   0      0      0      0      1      1      0.0673076923 0
 5   0      0      0      1      0      0      0.1971153846 0
 6   0      0      0      1      0      1      0.2644230769 0.3333333333

以下是我执行上述命令时收到的警告。

Warning message:
algorithm did not converge in 50 of 50 repetition(s) within the stepmax

关于为什么会发生这种情况的任何澄清?

4

2 回答 2

1

将“stepmax”从 100 增加到某个较大的值,以便让算法有更多时间收敛。但是,更好的是减少隐藏节点的数量,然后重新运行神经网络

于 2015-08-08T12:50:00.560 回答
0

您可以更改隐藏层/隐藏节点的数量,并通过反复试验尝试不同的组合。您可以尝试将 MLP 中的隐藏层数增加到 2。具有 2 个隐藏层的 MLP 很少使用,但在数据中复杂模式的情况下它们确实有用。理论上,具有 2 个隐藏层的 MLP 可用于逼近任何函数。

于 2015-08-12T08:41:15.403 回答