0
我想抓住神經網絡背後的想法(完全),所以我開始創建我自己的simple perceptron算法。簡單/單層感知器算法不起作用
這裏是我的代碼(在JavaScript):
var lr = 0.1;//learning rate
//Initiate the weights randomly
function initWeights(weights, trainingSets){
for(var i=0; i<trainingSets[0].in.length; i++){
weights[i] = Math.random()*2 - 1;
}
weights.push(Math.random()*2 - 1); //b
}
//Return the raw activation value for a giving trainingSet
function getSum(weights, trainingSet){
var sum = 0;
for(var i=0; i < trainingSet.in.length; i++){
sum += weights[i]*trainingSet.in[i];
}
sum += 1 * weights[weights.length-1];
return sum;
}
//Activation function
function activate(value){
return (value >= 0)? 1 : 0;
}
function train(weights, trainingSets){
var error = 0;
for(var i=0; i<trainingSets.length; i++){
var currentSet = trainingSets[i];
var activationValue = getSum(weights, currentSet);
var error = currentSet.out - activate(activationValue);
error += error;
for(var j=0; j<weights.length-1; j++){
var deltaW = error * lr * currentSet.in[j];
weights[j] += deltaW;
}
weights[weights.length-1] += error * lr * 1;
}
return error/(weights.length);
}
var inp = [
{in:[1,1], out:1},
{in:[0,0], out:0},
{in:[0,1], out:0},
];
var w = [];
initWeights(w, inp);
//for(var j = 0; j < inp.length; j++){
var error = 1;
while(error >= 0.01){
error = train(w, inp);
}
//}
console.log("===")
var tester = {in:[1,0], out: NaN};
console.log(getSum(w, tester)) //should be negative
console.log("y=("+w[1]+"*x+"+w[2]+")/"+w[1])
的結果並不一致,(我使用的是與算法學會)。
情節應該是這樣的:
但通常是這樣的:
我敢肯定,我失去了一些東西在這裏小,
在此先感謝。
嘿,我正要寫我的回答相同的結果。 – tsiki
是的,錯誤被重新宣佈,我的壞(我不是故意這樣做)。另外,最後一點讓我感到困惑,並不是給出一套基本的規則(不是全部)和(希望)網絡會相應的行爲的整個想法? – funerr
但它的行爲相應。只是你的規則集很小,以期望如此大的泛化。有太多可能的模型,**完全適合**你期望的規則集,它會奇妙地選擇你感興趣的唯一一個。 – lejlot