신경 네트워크의 아이디어를 파악하려고합니다. (완전히) 그래서 자신의 simple perceptron 알고리즘을 만들어 내기 시작했습니다. (내가 사용하고 알고리즘에 의해 배울 수)단순/단일 레이어 퍼셉트론 알고리즘이 작동하지 않습니다.
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