Neataptic 在训练后总是返回相同的值

Neataptic always returning same value after training

编辑: 我设法收集了几个简单的例子 https://github.com/developer239/neural-network-playground

我刚开始玩 neataptic。我想让神经网络学习如何使用以下数字进行计数:1、2、3、4、5、6、7、8、9。

我将输入标准化为 0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9。

然后我编写了非常简单的训练程序来教网络如何加 1 + 2 (0.1 + 0.3)。

const architect = require('neataptic').architect


const myTrainingSet = [
  { input: [0.1, 0.2], output: [0.3] },
  { input: [0.2, 0.1], output: [0.3] }
];

myNetwork = architect.Perceptron(2, 3, 1);

myNetwork.train(myTrainingSet, {
  log: 1,
  error: 0.01,
  iterations: 1000,
  rate: 0.3
});

console.log(myNetwork.activate([0,0]));
console.log(myNetwork.activate([1,1]));
console.log(myNetwork.activate([0.1,0.2]));

问题是这个日志:

[ 0.3717501873608793 ]
[ 0.3695919770977549 ]
[ 0.37142744367869446 ]

它基本上为每个输入记录 0.3。有人可以解释我做错了什么吗? :)

数据集太小,神经网络无法从模式中学习。您只为其提供了输出为 0.3 的样本。神经网络通过始终输出 0.3 来最小化其错误,因为这正是它的训练方式。我创建了一个包含 1000 个(动态生成的)样本的示例,这似乎有效:

const architect = neataptic.architect;

const trainingSet = [];

for (var i = 0; i < 1000; i++) {
    let integer1 = Math.floor(Math.random() * 10);
  let integer2 = Math.round(Math.random() * (10 - integer1));

  let output = (integer1 + integer2) / 10;

  trainingSet.push({ input: [integer1 / 10, integer2 / 10], output: [output] });
}

myNetwork = architect.Perceptron(2, 3, 1);

myNetwork.train(trainingSet, {
  log: 50,
  error: 0.0001,
  iterations: 1000,
  rate: 0.3,
  momentum: 0.9
});

console.log(myNetwork.activate([0,0]));
console.log(myNetwork.activate([0.1,0.2]));
console.log(myNetwork.activate([0.5, 0.5]));

JSFiddle