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]));
编辑: 我设法收集了几个简单的例子 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]));