我试图为基本布尔表达式实现一个简单的感知器。但我无法正确地训练非运算感知器。
我成功地训练了与和或感知器,使其在给定的输入集上返回正确的值。但当我尝试训练非运算时,
这是我操作的方法:
与和或感知器有两个输入、两个权重和一个偏置(偏置输入固定为1)。
所有感知器的权重初始值都为0。然后我生成随机值(介于0和1之间)来训练感知器,并保持循环直到得到10次正确的猜测。
它们的学习率为0.1
这是训练过程:
为了猜测值:
对于每个输入,我将输入乘以权重,然后将所有值相加,包括偏置。
sum = (weight1 * input1) + (weight2 * input2) + (biasWeight * biasInput)--偏置输入固定为1return = if (sum > 0) then 1 else 0
为了训练感知器:
我从感知器获取猜测值
val = and.guess(1,0) --这将返回0或1error = answer - val
对于每个输入,我执行以下计算
weight = weight + (input * error * rate)
然后我对偏置执行相同的操作
biasWeight = biasWeight + (input * error * rate)--偏置输入固定为1
通过这个过程,我可以成功地训练与和或感知器。
与/或和非感知器之间的唯一区别是输入的数量(非运算只有1个输入)
但非运算感知器的权重只是根据学习率的数值不断增加。
有时候,根据非感知器的训练顺序,当它达到0.5时,会得到正确的值。
当我回家后发布代码时,我发现了错误。应该返回weight * input的CALC函数却返回了weight + input,而这实际上对与和或的训练有效。
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head> <meta charset="utf-8" /> <title></title> <script src="jquery-3.2.1.js"></script> <script type="text/javascript"> function Show(text) { if (!text) { text = ''; } document.writeln(text + '<br />'); } //返回0到1之间的随机值 function getRandom() { return Math.floor(Math.random() * 2); }; function PerceptronData(input, weight) { this.input = input; this.weight = weight; } PerceptronData.prototype.calc = function () { var result = this.input + this.weight; return result; }; PerceptronData.prototype.adjust = function (error, rate) { this.weight += (this.input * error * rate); }; PerceptronData.prototype.print = function () { return '(' + this.input + ', ' + this.weight + ')'; } function Perceptron(n) { this.data = [];//数据数组 [input, weight] this.bias = new PerceptronData(1, 0); this.rate = 0.1;//学习率 //初始数据 for (var index = 0; index < n; index++) { this.data.push(new PerceptronData(0, 0)); } } //在最终感知器中从"guess"函数调用 Perceptron.prototype.process = function (inputs) { var data = this.data; if (inputs.length != data.length) { throw "输入的数量 [" + inputs.length + "] 与感知器的初始值 [" + data.length + "] 不匹配。"; } var dataSum = 0; for (var index = 0; index < data.length; index++) { data[index].input = parseInt(inputs[index]); dataSum += data[index].calc(); } dataSum += this.bias.calc(); return dataSum; }; //调整每个数据的权重 Perceptron.prototype.adjust = function (value, answer) { var data = this.data; var error = answer - value; for (var index = 0; index < data.length; index++) { data[index].adjust(error, this.rate); } this.bias.adjust(error, this.rate); }; Perceptron.prototype.print = function () { var data = this.data; var result = ''; for (var index = 0; index < data.length; index++) { result += 'data[' + index + ']' + data[index].print() + ' > '; } return result + 'bias' + this.bias.print(); }; function NotPerceptron() { Perceptron.call(this, 1); } NotPerceptron.prototype = Object.create(Perceptron.prototype); NotPerceptron.prototype.guess = function (value) { var data = this.process([value]); //激活函数 return ((data > 0) ? 1 : 0); }; NotPerceptron.prototype.train = function (value, answer) { var result = this.guess([value]); this.adjust(result, answer); }; function AndPerceptron() { Perceptron.call(this, 2); } AndPerceptron.prototype = Object.create(Perceptron.prototype); AndPerceptron.prototype.guess = function (valueA, valueB) { var data = this.process([valueA, valueB]); //激活函数 return ((data > 0) ? 1 : 0); }; AndPerceptron.prototype.train = function (valueA, valueB, answer) { var result = this.guess(valueA, valueB); this.adjust(result, answer); }; function OrPerceptron() { Perceptron.call(this, 2); } OrPerceptron.prototype = Object.create(Perceptron.prototype); OrPerceptron.prototype.guess = function (valueA, valueB) { var data = this.process([valueA, valueB]); //激活函数 return ((data > 0) ? 1 : 0); }; OrPerceptron.prototype.train = function (valueA, valueB, answer) { var result = this.guess(valueA, valueB); this.adjust(result, answer); }; </script></head><body> <script type="text/javascript"> Show('训练与运算...'); Show(); var and = new AndPerceptron(); var count = 0; var total = 0; var max = 100; while (count < 10 && total < max) { total++; var a = getRandom(); var b = getRandom(); var answer = ((a === 1 && b === 1) ? 1 : 0); and.train(a, b, answer); a = getRandom(); b = getRandom(); answer = ((a === 1 && b === 1) ? 1 : 0); var guess = and.guess(a, b); if (guess === answer) { count++; } else { count = 0; } Show(' > 与运算(' + a + ', ' + b + ') = ' + guess + ' > [' + and.print() + ']'); if (count == 10) { //最终测试 if (and.guess(0, 0) == 1) { count = 0; } if (and.guess(0, 1) == 1) { count = 0; } if (and.guess(1, 0) == 1) { count = 0; } if (and.guess(1, 1) == 0) { count = 0; } } } Show(); if (total >= max) { Show('与运算训练失败...'); } else { Show('与运算训练完成,共[' + total + ']次交互。[' + and.print() + ']'); } Show(); Show('与运算(0, 0) = ' + and.guess(0, 0)); Show('与运算(0, 1) = ' + and.guess(0, 1)); Show('与运算(1, 0) = ' + and.guess(1, 0)); Show('与运算(1, 1) = ' + and.guess(1, 1)); Show(); Show('训练或运算...'); Show(); var or = new OrPerceptron(); count = 0; total = 0; max = 100; while (count < 10 && total < max) { total++; var a = getRandom(); var b = getRandom(); var answer = ((a === 1 || b === 1) ? 1 : 0); or.train(a, b, answer); a = getRandom(); b = getRandom(); answer = ((a === 1 || b === 1) ? 1 : 0); var guess = or.guess(a, b); if (guess === answer) { count++; } else { count = 0; } Show(' > 或运算(' + a + ', ' + b + ') = ' + guess + ' > [' + or.print() + ']'); if (count == 10) { //最终测试 if (or.guess(0, 0) == 1) { count = 0; } if (or.guess(0, 1) == 0) { count = 0; } if (or.guess(1, 0) == 0) { count = 0; } if (or.guess(1, 1) == 0) { count = 0; } } } Show(); if (total >= max) { Show('或运算训练失败...'); } else { Show('或运算训练完成,共[' + total + ']次交互。[' + or.print() + ']'); } Show(); Show('或运算(0, 0) = ' + or.guess(0, 0)); Show('或运算(0, 1) = ' + or.guess(0, 1)); Show('或运算(1, 0) = ' + or.guess(1, 0)); Show('或运算(1, 1) = ' + or.guess(1, 1)); Show(); Show('训练非运算...'); Show(); var not = new NotPerceptron(); not.rate = 0.1; count = 0; total = 0; max = 100; while (count < 10 && total < max) { total++; var test = getRandom(); var answer = ((test === 1) ? 0 : 1); not.train(test, answer); test = getRandom(); answer = ((test === 1) ? 0 : 1); var guess = not.guess(test); if (guess === answer) { count++; } else { count = 0; } Show(' > 非运算(' + test + ') = ' + guess + ' > [' + not.print() + ']'); if (count == 10) { //最终测试 if (not.guess(0) == 0) { count = 0; } if (not.guess(1) == 1) { count = 0; } } } Show(); if (total >= max) { Show('非运算训练失败...'); } else { Show('非运算训练完成,共[' + total + ']次交互。[' + not.print() + ']'); } Show(); Show('非运算(1) = ' + not.guess(1)); Show('非运算(0) = ' + not.guess(0)); </script></body></html>
输出结果:
训练与运算...> 与运算(1, 0) = 1 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, 0.1)]> 与运算(1, 1) = 1 > [data[0](1, 0.1) > data[1](1, 0) > bias(1, 0)]> 与运算(1, 0) = 1 > [data[0](1, 0.1) > data[1](0, 0) > bias(1, 0)]> 与运算(1, 1) = 1 > [data[0](1, 0.1) > data[1](1, 0) > bias(1, 0)]> 与运算(1, 0) = 1 > [data[0](1, 0.1) > data[1](0, 0) > bias(1, 0)]> 与运算(0, 1) = 0 > [data[0](0, 0.1) > data[1](1, 0) > bias(1, 0)]> 与运算(0, 1) = 0 > [data[0](0, 0) > data[1](1, 0) > bias(1, -0.1)]> 与运算(0, 1) = 1 > [data[0](0, 0.1) > data[1](1, 0.1) > bias(1, 0)]> 与运算(0, 1) = 0 > [data[0](0, 0.1) > data[1](1, 0) > bias(1, -0.1)]> 与运算(1, 1) = 0 > [data[0](1, 0.1) > data[1](1, 0) > bias(1, -0.1)]> 与运算(1, 1) = 0 > [data[0](1, 0.1) > data[1](1, 0) > bias(1, -0.1)]> 与运算(1, 0) = 0 > [data[0](1, 0.1) > data[1](0, 0) > bias(1, -0.1)]> 与运算(1, 1) = 1 > [data[0](1, 0.2) > data[1](1, 0.1) > bias(1, 0)]> 与运算(0, 0) = 0 > [data[0](0, 0.1) > data[1](0, 0.1) > bias(1, -0.1)]> 与运算(1, 0) = 0 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, -0.1)]> 与运算(1, 0) = 0 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, -0.1)]> 与运算(1, 0) = 0 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, -0.1)]> 与运算(1, 0) = 0 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, -0.1)]> 与运算(0, 0) = 0 > [data[0](0, 0.1) > data[1](0, 0.1) > bias(1, -0.1)]> 与运算(1, 0) = 0 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, -0.1)]> 与运算(0, 0) = 0 > [data[0](0, 0.1) > data[1](0, 0.1) > bias(1, -0.1)]与运算训练完成,共[21]次交互。[data[0](1, 0.1) > data[1](1, 0.1) > bias(1, -0.1)]与运算(0, 0) = 0与运算(0, 1) = 0与运算(1, 0) = 0与运算(1, 1) = 1训练或运算...> 或运算(1, 0) = 1 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, 0.1)]> 或运算(0, 1) = 1 > [data[0](0, 0.1) > data[1](1, 0.1) > bias(1, 0.1)]> 或运算(0, 1) = 1 > [data[0](0, 0.1) > data[1](1, 0.1) > bias(1, 0.1)]> 或运算(0, 0) = 1 > [data[0](0, 0.1) > data[1](0, 0.1) > bias(1, 0.1)]> 或运算(0, 0) = 1 > [data[0](0, 0.1) > data[1](0, 0.1) > bias(1, 0.1)]> 或运算(1, 0) = 1 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, 0.1)]> 或运算(0, 1) = 1 > [data[0](0, 0.1) > data[1](1, 0.1) > bias(1, 0.1)]> 或运算(1, 0) = 1 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, 0)]> 或运算(0, 0) = 0 > [data[0](0, 0.1) > data[1](0, 0.1) > bias(1, 0)]> 或运算(1, 0) = 1 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, 0)]> 或运算(0, 0) = 0 > [data[0](0, 0.1) > data[1](0, 0.1) > bias(1, 0)]> 或运算(0, 0) = 0 > [data[0](0, 0.1) > data[1](0, 0.1) > bias(1, 0)]> 或运算(1, 1) = 1 > [data[0](1, 0.1) > data[1](1, 0.1) > bias(1, 0)]> 或运算(1, 0) = 1 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, 0)]> 或运算(1, 0) = 1 > [data[0](1, 0.1) > data[1](0, 0.1) > bias(1, 0)]或运算训练完成,共[15]次交互。[data[0](1, 0.1) > data[1](1, 0.1) > bias(1, 0)]或运算(0, 0) = 0或运算(0, 1) = 1或运算(1, 0) = 1或运算(1, 1) = 1训练非运算...> 非运算(0) = 0 > [data[0](0, 0) > bias(1, 0)]> 非运算(1) = 1 > [data[0](1, 0) > bias(1, 0.1)]> 非运算(0) = 1 > [data[0](0, 0) > bias(1, 0.1)]> 非运算(1) = 1 > [data[0](1, 0) > bias(1, 0.1)]> 非运算(0) = 0 > [data[0](0, -0.1) > bias(1, 0)]> 非运算(1) = 1 > [data[0](1, -0.2) > bias(1, -0.1)]> 非运算(1) = 1 > [data[0](1, -0.2) > bias(1, -0.1)]> 非运算(0) = 1 > [data[0](0, -0.2) > bias(1, -0.1)]> 非运算(0) = 1 > [data[0](0, -0.30000000000000004) > bias(1, -0.2)]> 非运算(1) = 1 > [data[0](1, -0.30000000000000004) > bias(1, -0.2)]> 非运算(0) = 1 > [data[0](0, -0.30000000000000004) > bias(1, -0.2)]> 非运算(1) = 1 > [data[0](1, -0.4) > bias(1, -0.30000000000000004)]> 非运算(1) = 1 > [data[0](1, -0.5) > bias(1, -0.4)]> 非运算(1) = 1 > [data[0](1, -0.5) > bias(1, -0.4)]> 非运算(1) = 1 > [data[0](1, -0.6) > bias(1, -0.5)]> 非运算(1) = 1 > [data[0](1, -0.6) > bias(1, -0.5)]> 非运算(1) = 1 > [data[0](1, -0.7) > bias(1, -0.6)]> 非运算(1) = 1 > [data[0](1, -0.7999999999999999) > bias(1, -0.7)]> 非运算(0) = 1 > [data[0](0, -0.8999999999999999) > bias(1, -0.7999999999999999)]> 非运算(0) = 1 > [data[0](0, -0.8999999999999999) > bias(1, -0.7999999999999999)]> 非运算(0) = 1 > [data[0](0, -0.9999999999999999) > bias(1, -0.8999999999999999)]> 非运算(0) = 1 > [data[0](0, -0.9999999999999999) > bias(1, -0.8999999999999999)]> 非运算(1) = 1 > [data[0](1, -0.9999999999999999) > bias(1, -0.8999999999999999)]> 非运算(0) = 1 > [data[0](0, -0.9999999999999999) > bias(1, -0.8999999999999999)]> 非运算(0) = 1 > [data[0](0, -1.0999999999999999) > bias(1, -0.9999999999999999)]> 非运算(1) = 1 > [data[0](1, -1.2) > bias(1, -1.0999999999999999)]> 非运算(0) = 1 > [data[0](0, -1.2) > bias(1, -1.0999999999999999)]> 非运算(1) = 1 > [data[0](1, -1.2) > bias(1, -1.0999999999999999)]> 非运算(0) = 1 > [data[0](0, -1.2) > bias(1, -1.0999999999999999)]> 非运算(0) = 1 > [data[0](0, -1.2) > bias(1, -1.0999999999999999)]> 非运算(1) = 1 > [data[0](1, -1.2) > bias(1, -1.0999999999999999)]> 非运算(1) = 1 > [data[0](1, -1.3) > bias(1, -1.2)]> 非运算(0) = 1 > [data[0](0, -1.4000000000000001) > bias(1, -1.3)]> 非运算(0) = 1 > [data[0](0, -1.5000000000000002) > bias(1, -1.4000000000000001)]> 非运算(1) = 1 > [data[0](1, -1.6000000000000003) > bias(1, -1.5000000000000002)]> 非运算(1) = 1 > [data[0](1, -1.6000000000000003) > bias(1, -1.5000000000000002)]> 非运算(0) = 1 > [data[0](0, -1.6000000000000003) > bias(1, -1.5000000000000002)]> 非运算(0) = 1 > [data[0](0, -1.7000000000000004) > bias(1, -1.6000000000000003)]> 非运算(0) = 1 > [data[0](0, -1.8000000000000005) > bias(1, -1.7000000000000004)]> 非运算(1) = 1 > [data[0](1, -1.9000000000000006) > bias(1, -1.8000000000000005)]> 非运算(1) = 1 > [data[0](1, -1.9000000000000006) > bias(1, -1.8000000000000005)]> 非运算(1) = 1 > [data[0](1, -1.9000000000000006) > bias(1, -1.8000000000000005)]> 非运算(1) = 1 > [data[0](1, -1.9000000000000006) > bias(1, -1.8000000000000005)]> 非运算(0) = 1 > [data[0](0, -2.0000000000000004) > bias(1, -1.9000000000000006)]> 非运算(1) = 1 > [data[0](1, -2.1000000000000005) > bias(1, -2.0000000000000004)]> 非运算(1) = 1 > [data[0](1, -2.2000000000000006) > bias(1, -2.1000000000000005)]> 非运算(1) = 1 > [data[0](1, -2.3000000000000007) > bias(1, -2.2000000000000006)]> 非运算(0) = 1 > [data[0](0, -2.3000000000000007) > bias(1, -2.2000000000000006)]> 非运算(0) = 1 > [data[0](0, -2.400000000000001) > bias(1, -2.3000000000000007)]> 非运算(0) = 1 > [data[0](0, -2.500000000000001) > bias(1, -2.400000000000001)]> 非运算(1) = 1 > [data[0](1, -2.600000000000001) > bias(1, -2.500000000000001)]> 非运算(0) = 1 > [data[0](0, -2.700000000000001) > bias(1, -2.600000000000001)]> 非运算(1) = 1 > [data[0](1, -2.800000000000001) > bias(1, -2.700000000000001)]> 非运算(0) = 1 > [data[0](0, -2.9000000000000012) > bias(1, -2.800000000000001)]> 非运算(1) = 1 > [data[0](1, -3.0000000000000013) > bias(1, -2.9000000000000012)]> 非运算(1) = 1 > [data[0](1, -3.0000000000000013) > bias(1, -2.9000000000000012)]> 非运算(1) = 1 > [data[0](1, -3.0000000000000013) > bias(1, -2.9000000000000012)]> 非运算(0) = 1 > [data[0](0, -3.1000000000000014) > bias(1, -3.0000000000000013)]> 非运算(0) = 1 > [data[0](0, -3.1000000000000014) > bias(1, -3.0000000000000013)]> 非运算(1) = 1 > [data[0](1, -3.2000000000000015) > bias(1, -3.1000000000000014)]> 非运算(0) = 1 > [data[0](0, -3.3000000000000016) > bias(1, -3.2000000000000015)]> 非运算(1) = 1 > [data[0](1, -3.4000000000000017) > bias(1, -3.3000000000000016)]> 非运算(0) = 1 > [data[0](0, -3.5000000000000018) > bias(1, -3.4000000000000017)]> 非运算(0) = 1 > [data[0](0, -3.600000000000002) > bias(1, -3.5000000000000018)]> 非运算(1) = 1 > [data[0](1, -3.700000000000002) > bias(1, -3.600000000000002)]> 非运算(1) = 1 > [data[0](1, -3.700000000000002) > bias(1, -3.600000000000002)]> 非运算(1) = 1 > [data[0](1, -3.800000000000002) > bias(1, -3.700000000000002)]> 非运算(0) = 1 > [data[0](0, -3.800000000000002) > bias(1, -3.700000000000002)]> 非运算(1) = 1 > [data[0](1, -3.900000000000002) > bias(1, -3.800000000000002)]> 非运算(1) = 1 > [data[0](1, -4.000000000000002) > bias(1, -3.900000000000002)]> 非运算(1) = 1 > [data[0](1, -4.000000000000002) > bias(1, -3.900000000000002)]> 非运算(0) = 1 > [data[0](0, -4.000000000000002) > bias(1, -3.900000000000002)]> 非运算(0) = 1 > [data[0](0, -4.000000000000002) > bias(1, -3.900000000000002)]> 非运算(1) = 1 > [data[0](1, -4.100000000000001) > bias(1, -4.000000000000002)]> 非运算(1) = 1 > [data[0](1, -4.100000000000001) > bias(1, -4.000000000000002)]> 非运算(1) = 1 > [data[0](1, -4.200000000000001) > bias(1, -4.100000000000001)]> 非运算(0) = 1 > [data[0](0, -4.300000000000001) > bias(1, -4.200000000000001)]> 非运算(1) = 1 > [data[0](1, -4.300000000000001) > bias(1, -4.200000000000001)]> 非运算(1) = 1 > [data[0](1, -4.4) > bias(1, -4.300000000000001)]> 非运算(0) = 1 > [data[0](0, -4.5) > bias(1, -4.4)]> 非运算(0) = 1 > [data[0](0, -4.5) > bias(1, -4.4)]> 非运算(0) = 1 > [data[0](0, -4.5) > bias(1, -4.4)]> 非运算(0) = 1 > [data[0](0, -4.6) > bias(1, -4.5)]> 非运算(1) = 1 > [data[0](1, -4.699999999999999) > bias(1, -4.6)]> 非运算(0) = 1 > [data[0](0, -4.799999999999999) > bias(1, -4.699999999999999)]> 非运算(1) = 1 > [data[0](1, -4.799999999999999) > bias(1, -4.699999999999999)]> 非运算(0) = 1 > [data[0](0, -4.899999999999999) > bias(1, -4.799999999999999)]> 非运算(0) = 1 > [data[0](0, -4.999999999999998) > bias(1, -4.899999999999999)]> 非运算(0) = 1 > [data[0](0, -5.099999999999998) > bias(1, -4.999999999999998)]> 非运算(0) = 1 > [data[0](0, -5.1999999999999975) > bias(1, -5.099999999999998)]> 非运算(0) = 1 > [data[0](0, -5.299999999999997) > bias(1, -5.1999999999999975)]> 非运算(0) = 1 > [data[0](0, -5.299999999999997) > bias(1, -5.1999999999999975)]> 非运算(0) = 1 > [data[0](0, -5.299999999999997) > bias(1, -5.1999999999999975)]> 非运算(1) = 1 > [data[0](1, -5.299999999999997) > bias(1, -5.1999999999999975)]> 非运算(0) = 1 > [data[0](0, -5.299999999999997) > bias(1, -5.1999999999999975)]> 非运算(0) = 1 > [data[0](0, -5.299999999999997) > bias(1, -5.1999999999999975)]> 非运算(0) = 1 > [data[0](0, -5.399999999999997) > bias(1, -5.299999999999997)]> 非运算(0) = 1 > [data[0](0, -5.4999999999999964) > bias(1, -5.399999999999997)]> 非运算(1) = 1 > [data[0](1, -5.599999999999996) > bias(1, -5.4999999999999964)]> 非运算(0) = 1 > [data[0](0, -5.699999999999996) > bias(1, -5.599999999999996)]> 非运算(1) = 1 > [data[0](1, -5.799999999999995) > bias(1, -5.699999999999996)]> 非运算(0) = 1 > [data[0](0, -5.899999999999995) > bias(1, -5.799999999999995)]> 非运算(0) = 1 > [data[0](0, -5.999999999999995) > bias(1, -5.899999999999995)]> 非运算(0) = 1 > [data[0](0, -6.099999999999994) > bias(1, -5.999999999999995)]> 非运算(1) = 1 > [data[0](1, -6.199999999999994) > bias(1, -6.099999999999994)]> 非运算(0) = 1 > [data[0](0, -6.199999999999994) > bias(1, -6.099999999999994)]> 非运算(1) = 1 > [data[0](1, -6.199999999999994) > bias(1, -6.099999999999994)]> 非运算(1) = 1 > [data[0](1, -6.199999999999994) > bias(1, -6.099999999999994)]> 非运算(0) = 1 > [data[0](0, -6.199999999999994) > bias(1, -6.099999999999994)]> 非运算(1) = 1 > [data[0](1, -6.199999999999994) > bias(1, -6.099999999999994)]> 非运算(0) = 1 > [data[0](0, -6.199999999999994) > bias(1, -6.099999999999994)]> 非运算(1) = 1 > [data[0](1, -6.299999999999994) > bias(1, -6.199999999999994)]> 非运算(0) = 1 > [data[0](0, -6.399999999999993) > bias(1, -6.299999999999994)]
回答:
根据@[隐藏人名]的建议,我再次更新了问题,以便展示问题所在。这里是解决方案。
问题出在CALC函数上,该函数应该将输入的值乘以权重,但我却将其相加了。
不幸的是,我过于关注是否应该使用 sigmoid函数或其他函数,关注学习率和线性与非线性函数,以至于我没有发现这个错误。
而与和或感知器运行良好的事实真的把我带到了错误的方向上。
PerceptronData.prototype.calc = function () { //var result = this.input + this.weight;//这是错误的... :( var result = this.input * this.weight; return result;};