Mini-batches

Como el objetivo es implementar el entrenamiento de la red por descenso de gradiente usando "batches" del tamaño que decidamos (a los que estamos denominando "mini-batches"), será necesario dividir nuestros datos de entrenamiento en estos bloques. Para ello vamos a usar una list comprehension:

mini_batches = [training_data[start:start + self.batch_size] for start in range(0, n, self.batch_size)]

En la expresión anterior, "n" es el número de muestras de nuestro dataset de entrenamiento (el número de tuplas creadas en el paso anterior). Es decir, recorremos los índices de nuestro dataset entre 0 y n-1 con incrementos igual al tamaño del batch, almacenando en la variable start dicho índice, y extraemos el bloque de tuplas entre la indicada por start y star+batch_size-1. O, dicho con otras palabras, estamos extrayendo en la variable start el índice de la primera muestra de cada mini-batch y, a partir de dicho índice, extraemos las muestras del mini-batch, 

Si, por ejemplo, el atributo batch_size toma el valor 10 y estamos trabajando con 1.000 muestras, la lista mini_batches generada tendrá 100 valores, cada uno de los cuales será una lista de 10 tuplas. La primera lista contendrá las tuplas con índices de 0 a 9, la segunda las tuplas con índices de 10 a 19, etc.