Clase NNClassifier v1

La clase quedaría, por tanto, del siguiente modo:

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


    def fit(self, X, y):
        """ Entrenamiento de la red neuronal"""
        pass

    
    def predict(self, X):
        """ Predicción """
        pass

Sencillamente estaríamos instanciando nuestra clase pasando los parámetros mencionados (sizes, learning_rate, batch_size y epochs) y creando un atributo para cada parámetro.

Obsérvese que también se crea el atributo num_layers conteniendo el número de capas de la red (nuevamente, estamos hablando del total de capas incluyendo la capa de entrada y la de salida). Para calcular este atributo basta con contar el número de elementos de la lista sizes.

Si quisiéramos instanciar la clase con una capa de entrada de 784 neuronas (como haría falta para clasificar el dataset MNIST), 16 neuronas en una capa oculta, 10 neuronas en la capa de salida (también aquí es lo que haría falta para clasificar MNIST), una tasa de aprendizaje de 0.01, un batch de tamaño 32 y 10 epochs, podríamos hacerlo con el siguiente código:

model = NNClassifier(
    sizes = [784, 16, 10], 
    learning_rate = 0.01,
    batch_size = 32,
    epochs = 10
)