Fase feedforward

Esquema de la red

Ahora necesitamos pasar la muestra por la red obteniendo por el camino los valores zi y ai comentados, valores que vamos a almacenar en las variables z_layers a_layers, respectivamente.

Para la primera capa (la capa de entrada), los valores devueltos por las funciones de activación (los valores ai) coinciden con los valores de los parámetros de entrada xi (es decir, con las características predictivas de la muestra que estemos considerando) pues ya sabemos que, en dicha capa, no se realiza ninguna transformación a los datos:

a = x
a_layers = [x] # Valores devueltos por la función de activación

Y, para esta misma capa, no hay valores "z":

z_layers = []  # Valores devueltos por la función sumatorio

Para el resto de capas vamos considerando los valores "a" de la capa anterior como valores de entrada, calculamos el valor intermedio z, el resultado de aplicar a éste la función de activación -el vector "a" de la siguiente capa-, y almacenamos estos valores:

for b, w in zip(self.biases, self.weights):
    z = np.dot(w, a) + b
    z_layers.append(z)
    a = sigmoid(z)
    a_layers.append(a)