Understand batch loading of data

Citons A. Geron :

« The batch size can have a significant impact on your model’s performance and training time. The main benefit of using large batch sizes is that hardware accelerators like GPUs can process them efficiently, so the training algorithm will see more instances per second.  »

« Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow. »

Plus loin A.G cite des articles, notamment Yann LeCun, qui disent le contraire, à savoir qu’il est préférable d’utiliser des batch sizes plus petits (maximum 32).

En résumé, ça dépend ! il est préférable d’avoir un batch size élevé pour diminuer le temps de calcul mais ça risque de baisser la performance. L’idéal serait d’avoir un batch size finder, comme on a un learning rate finder. Certains y travaillent. En attendant qu’ils trouvent, faisons comme tout le monde, utilisons un batch size de 32 !

Pour définir un batch size, rien de compliqué. Exemple :

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow import keras
dataset = tf.data.Dataset.range(8) 
list(dataset.as_numpy_iterator()) 
0, 1, 2, 3, 4, 5, 6, 7]
dataset = dataset.batch(3) 
list(dataset.as_numpy_iterator()) 
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7])]

On ne peut pas avoir 3 batchs de taille 3 avec 8 éléments, alors Tf attribue une taille de 2 au dernier. Si on ne veut que des batchs de même taille, il faut le préciser.

dataset = tf.data.Dataset.range(8)
dataset = dataset.batch(3, drop_remainder=True) 
list(dataset.as_numpy_iterator()) 

Puisque drop_remainder=True, alors on n’autorise que des batchs de même taille.

[array([0, 1, 2]), array([3, 4, 5])]