Implementación de Una Red Neuronal Desde Cero en Python
Implementación de Una Red Neuronal Desde Cero en Python
def sigmoid(x):
A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0
En Python, los parámetros de entrada y la respuesta se pueden escribir como
weights_1 = np.random.rand(X.shape[1], 2)
weights_2 = np.random.rand(2, 1)
donde los presos de la primera capa son un matiz de 2×2, por los dos valores de entrada y
por las dos neuronas de la capa intermedia. La segunda capa tiene una matriz de 2×1, por
las dos neuronas de la capa intermedia y la única neurona que se ha utiliza en la capa de
salida.
En este punto la configuración de la red neuronal ya está definida. Los resultados que se
obtendría con la función predict dependerán de los pesos. En la configuración aleatoria
actual los valores obtenidos serán completamente erróneos. El proceso de ajuste de estos
pesos es el proceso de entrenamiento de la red neuronal.
Entrenamiento mediante propagación hacia atrás
Generalmente, el entrenamiento de las redes neuronales se realiza con un proceso que se
llama propagación de hacia atrás (backpropagation). Este es un proceso iterativo en el que
inicialmente se obtienen las predicciones de la red con los valores actuales y,
posteriormente se corrigen con los pesos propagando el error que se comete hacia atrás.
Para esto se ha de definir una función de error, una de las más sencillas es el error
cuadrático medio que se define mediante la expresión:
donde WWson los pesos y xx los valores de entrada. Esto hace que se tenga
siguientes líneas:
resultado:
for i in range(10000):
e, weights_1, weights_2 = backprop(X, y, weights_1, weights_2)
error.append(e)
En este punto los resultados son
[[0.07477346],
[0.94025856],
[0.93999809],
[0.0499691 ]
Lo que son unos resultados muy próximos a los esperados. Por otro lado, se puede crear
una figura en la que se muestra el error en función del número de iteraciones para