
Comprender el funcionamiento interno de un perceptrón simple y cómo se entrena para resolver un problema linealmente separable: la puerta lógica AND.
Computadora con Python instalado (versión 3.6 o superior)
Editor de código (como VS Code, Thonny o Jupyter Notebook)
Biblioteca numpy instalada (pip install numpy si no se tiene)
import numpy as np
# Datos de entrada para la compuerta AND (X1, X2)
entradas = np.array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
# Salida esperada para cada combinación de entrada
salidas = np.array([[0], [0], [0], [1]])
# Inicializamos pesos y bias de forma aleatoria
pesos = np.random.rand(2, 1) # Dos entradas, una salida
bias = np.random.rand(1)
tasa_aprendizaje = 0.1
def activacion(x):
return 1 if x >= 1 else 0
# Entrenamiento por 10 épocas
for epoca in range(10):
print(f"Época {epoca + 1}")
for x, y_esperado in zip(entradas, salidas):
salida_neta = np.dot(x, pesos) + bias
salida_obtenida = activacion(salida_neta)
# Cálculo del error
error = y_esperado - salida_obtenida
# Actualización de pesos y bias
pesos += tasa_aprendizaje * error * x.reshape(2, 1)
bias += tasa_aprendizaje * error
print(f" Entrada: {x}, Esperado: {y_esperado[0]}, Obtenido: {salida_obtenida}")
print("\n--- Prueba final ---")
for x in entradas:
salida_neta = np.dot(x, pesos) + bias
salida_obtenida = activacion(salida_neta)
print(f" Entrada: {x} → Salida: {salida_obtenida}")
Después del entrenamiento, el perceptrón debe haber aprendido que solo cuando ambas entradas son 1, la salida es 1 (como la compuerta AND). Puedes observar cómo los pesos se ajustan automáticamente para lograr esto.
Puedes acceder al código completo aca.
Frexus
No comments yet