2017-10-07 119 views
0

编辑后返回相同的值:我设法张罗几个简单的例子https://github.com/developer239/neural-network-playgroundNeataptic总是培养

我刚开始玩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每个输入。有些人可以解释我做错了什么吗? :)

回答

2

该数据集对于神经网络从模式学习来说太小。您只提供了具有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