Para esto, vamos a modificar el constructor de nuestra clase de forma que acepte un nuevo parámetro, validation_split que, por defecto tomará el valor None. Este parámetro contendrá un número real entre 0 y 1 que determinará el porcentaje de los datos de entrenamiento a dedicar a validación.
Nuestro constructor quedará, por lo tanto, de la siguiente forma:
def __init__(self, sizes, learning_rate = 0.01, batch_size = 16, epochs = 10, shuffle = True,
validation_split = None):
""" 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:]]
self.shuffle = shuffle # Si toma el valor True, se desordenará el dataset
self.validation_split = validation_split # Porcentaje de muestras para validación