Si llevamos el código anterior a nuestro código de definición de la clase Network, el resultado es el siguiente:
import numpy as np
class NNClassifier(object):
def __init__(self, sizes, learning_rate = 0.01, batch_size = 16, epochs = 10):
""" Constructor de la red neuronal """
self.num_layers = len(sizes) # Número total de capas de la red
self.sizes = sizes # Lista conteniendo el número de neuronas por capa
self.learning_rate = learning_rate # Tasa de aprendizaje
self.batch_size = batch_size # Tamaño del batch
self.epochs = epochs # Número de epochs durante los que entrenar la red
self.weights = [np.random.randn(x, y) for (x, y) in zip(sizes[1:], sizes[:-1])]
self.biases = [np.random.randn(n, 1) for n in sizes[1:]]
def fit(self, X, y):
""" Entrenamiento de la red neuronal"""
pass
def predict(self, X):
""" Predicción """
pass
Obsérvese que estamos creando dos atributos (weights y biases) con las listas de matrices vistas, y que se han utilizado las variables "x" e "y" en lugar de num_neuronas_capa y num_neuronas_capa_anterior para hacer el código un poco más corto.
También es necesario destacar que necesitamos importar la librería NumPy para poder acceder a sus funciones de generación de arrays de números aleatorios. La importación de esta librería se dará por supuesto de ahora en adelante.
La instanciación de la clase no varía. Por ejemplo:
model = NNClassifier(
sizes = [784, 16, 10],
learning_rate = 0.01,
batch_size = 32,
epochs = 10
)