XOR n'est pas résoluble en utilisant un seul perceptron avec un produit scalaire standard et une fonction pas à pas.Comment exécuter un perceptron à 2 couches pour résoudre XOR
Cet article suggère d'utiliser 3 Perceptron pour faire un réseau: http://toritris.weebly.com/perceptron-5-xor-how--why-neurons-work-together.html
Je suis en train de gérer le réseau 3 perceptron cette façon, mais il ne produit pas de résultats corrects pour XOR:
//pseudocode
class perceptron {
constructor(training_data) {
this.training_data = training_data
}
train() {
iterate multiple times over training data
to train weights
}
unit_step(value) {
if (value<0) return 0
else return 1
}
compute(input) {
weights = this.train()
sum = scalar_product(input,weights)
return unit_step(sum)
}
}
Le perceptron ci-dessus peut résoudre les opérations NOT, AND, OU bits correctement. Voici comment j'utilise 3 Perceptron pour résoudre XOR:
AND_perceptron = perceptron([
{Input:[0,0],Output:0},
{Input:[0,1],Output:0},
{Input:[1,0],Output:0},
{Input:[1,1],Output:1}
])
OR_perceptron = perceptron([
{Input:[0,0],Output:0},
{Input:[0,1],Output:1},
{Input:[1,0],Output:1},
{Input:[1,1],Output:1}
])
XOR_perceptron = perceptron([
{Input:[0,0],Output:0},
{Input:[0,1],Output:1},
{Input:[1,0],Output:1},
{Input:[1,1],Output:0}
])
test_x1 = 0
test_x2 = 1
//first layer of perceptrons
and_result = AND_perceptron.compute(test_x1,test_x2)
or_result = OR_perceptron.compute(test_x1,test_x2)
//second layer
final_result = XOR_perceptron.compute(and_result,or_result)
Le final_result ci-dessus n'est pas cohérente, parfois 0, parfois 1. Il semble que je lance les 2 couches à tort. Comment faire fonctionner correctement ces 3 perceptrons en 2 couches?
tks, donc je peux utiliser 2 perceptrons qui peuvent apprendre ET, OU, et faire le résultat pour XOR basé sur ces 2 perceptrons – johnlowvale