Está en la página 1de 7

EJEMPLO XOR EN

PYTHON
FUNCION XOR
X1 X2 Y
0 0 0 B
0 1 1A
1 0 1A
1 1 0B

x2
(0,1) (1,1) Patron de entrada
A B clase B, no está en
su región correcta
A

B
B A x1
(0,0) (1,0)

La función XOR no la aprende un Perceptron, porque


sus patrones de entrada no son linealmente separables.
EJEMPLO EN Python PERCEPTRON XOR

X1 X2 Y
0 0 0 TRAIN
0 1 1 TRAIN
1 0 1 TRAIN
1 1 0 TRAIN
0.02 0.01 0 TEST
0.98 0.01 1 TEST
0.01 0.99 QUERY
0.99 0.98 QUERY
Perceptron XOR
from random import choice
from numpy import array, dot, random, poly1d
import pylab as plt
# Función de transferencia escalón:
A= 1
B= int(input("A=1, B<0 o -1> = "))
escalon = lambda x: B if x < 0 else A
# datos para train, entradas x1, x2, x0 (x0 siempre es 1)
# salida deseada d: (array[x1, x2, x0], d)
train_data = [
(array([0,0,1]), 0),
(array([0,1,1]), 1),
(array([1,1,1]), 1),
(array([1,0,1]), 1),
]
# pesos iniciales aleatorios: w0, w1, w2
w = random.rand(3)
Perceptron XOR
# lista de valores de error, inicializada
errores = []
# tasa de aprendizaje (alfa)
alfa = 0.2
# número máximo de iteraciones de aprendizaje
itmax = 100
# entrenamiento (calcula valores de los pesos)
for i in range(itmax):
# selecciona una fila de E/S de datos de train
x, d = choice(train_data)
# calcula la entrada neta net, producto escalar de w, x
net = dot(w, x)
# calcula la salida obtenida
y = escalon(net)
# calcula el error= salida deseada (d) - salida obtenida (y)
error = d - y
errores.append(error)
# actualiza pesos de las conexiones (regla de aprendizaje)
w = w + alfa * error * x
Perceptron XOR
print("errores: ",errores)
# calcula y muestra las salidas para datos de test
test_data = [
(array([0.02,0.01,1]),0),
(array([0.98,0.01,1]),),
]
for x, _ in test_data:
net = dot(x, w)
print("{}: {} -> {}".format(x[:2], net, escalon(net)))

# calcula y muestra las salidas para una consulta


query_data = [
(array([0.01,0.99,1])),
(array([0.99,0.98,1])),
]
print("resultado de la consulta")
for xc in query_data:
net = dot(xc, w)
print("{} -> {}".format(xc[:2], escalon(net)))
GRACIAS

También podría gustarte