Javascript中用于XOR门的简单感知器
我试图用一个感知器来预测异或门。然而,结果似乎完全是随机的,我找不到错误 我做错了什么? -我的训练方法错了吗? -或者感知器模型有错误吗? -或者单个感知器不能用于此问题Javascript中用于XOR门的简单感知器,javascript,neural-network,perceptron,Javascript,Neural Network,Perceptron,我试图用一个感知器来预测异或门。然而,结果似乎完全是随机的,我找不到错误 我做错了什么? -我的训练方法错了吗? -或者感知器模型有错误吗? -或者单个感知器不能用于此问题 class Perceptron { constructor(input_nodes, learning_rate) { this.nodes = input_nodes; this.bias = Math.random() * 2 - 1; this.learnin
class Perceptron {
constructor(input_nodes, learning_rate) {
this.nodes = input_nodes;
this.bias = Math.random() * 2 - 1;
this.learning_rate = learning_rate;
this.weights = [];
for (let i = 0; i < input_nodes; i++) {
this.weights.push(Math.random() * 2 - 1)
}
}
train (inputs, desired_output) {
// Guess the result
let guess = this.predict(inputs);
let error = desired_output - guess;
// Adjust weights and bias
for (let i = 0; i < this.weights.length; i++) {
this.weights[i] += this.learning_rate * error * inputs[i];
}
this.bias += error * this.learning_rate;
}
predict (input_array) {
if ( input_array.length != this.nodes) throw new Error({message: 'Invalid Input!'})
let sum = this.bias;
for (let i = 0; i < input_array.length; i++) {
sum += this.weights[i] * input_array[i];
}
return this.activate(sum);
}
activate (num) {
return num < 0 ? 0 : 1;
}
}
module.exports = Perceptron;
if ( require.main === module ) {
let p = new Perceptron(2, 0.003);
for ( let i = 0; i < 1000; i++ ) {
p.train([0, 0], 0);
p.train([0, 1], 1);
p.train([1, 0], 1);
p.train([1, 1], 0);
}
console.log( p.predict([0, 1]) )
}
类感知器{
构造函数(输入节点、学习速率){
this.nodes=输入_节点;
this.bias=Math.random()*2-1;
这个。学习率=学习率;
此参数为:权重=[];
for(设i=0;i是一个制作简单神经网络的好地方。你不能用一个感知器来制作XOR,因为XOR不是线性可分的(这是个玩笑吗?)。如果你使用多个感知器,在一张纸上计算几个迭代,然后比较它们。@IvanKuckir哦,是的!谢谢,是的,但我不想建立一个神经网络。只是想看看单个感知器能做什么。我得到了我的答案——这是因为和XOR不是线性可分的。