Clase NNClassifier v2

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_capanum_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
)