j'essaye d'implémenter le perceptron multicouche avec la rétropropagation, mais je ne peux toujours pas lui enseigner XOR, j'obtiendrai également souvent l'erreur de gamme de maths. J'ai regardé dans les livres et Google pour les règles d'apprentissage et d'erreurs de retour des méthodes de propagation, mais je ne sais pas où sont mes erreurspython - perceptron multicouche, backpropagation, ne peut apprendre XOR
def logsig(net):
return 1/(1+math.exp(-net))
def perceptron(coef = 0.5, iterations = 10000):
inputs = [[0,0],[0,1],[1,0],[1,1]]
desiredOuts = [0,1,1,0]
bias = -1
[input.append(bias) for input in inputs]
weights_h1 = [random.random() for e in range(len(inputs[0]))]
weights_h2 = [random.random() for e in range(len(inputs[0]))]
weights_out = [random.random() for e in range(3)]
for itteration in range(iterations):
out = []
for input, desiredOut in zip(inputs, desiredOuts):
#1st hiden neuron
net_h1 = sum(x * w for x, w in zip(input, weights_h1))
aktivation_h1 = logsig(net_h1)
#2st hiden neuron
net_h2 = sum(x * w for x, w in zip(input, weights_h2))
aktivation_h2 = logsig(net_h2)
#output neuron
input_out = [aktivation_h1, aktivation_h2, bias]
net_out = sum(x * w for x, w in zip(input_out, weights_out))
aktivation_out = logsig(net_out)
#error propagation
error_out = (desiredOut - aktivation_out) * aktivation_out * (1- aktivation_out)
error_h1 = aktivation_h1 * (1-aktivation_h1) * weights_out[0] * error_out
error_h2 = aktivation_h2 * (1-aktivation_h2) * weights_out[1] * error_out
#learning
weights_out = [w + x * coef * error_out for w, x in zip(weights_out, input_out)]
weights_h1 = [w + x * coef * error_out for w, x in zip(weights_h1, input)]
weights_h2 = [w + x * coef * error_out for w, x in zip(weights_h2, input)]
out.append(aktivation_out)
formatedOutput = ["%.2f" % e for e in out]
return formatedOutput
oui, c'est ça. Merci beaucoup – user2173836