De la documentation de tensorflow :
https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization
"Normaliser les activations de la couche précédente à chaque lot, c'est-à-dire appliquer une transformation qui maintient l'activation moyenne proche de 0 et l'écart-type d'activation proche de 1."
Par conséquent, je m'attends à ce que cette couche calcule d'abord la moyenne et l'écart type de la sortie de la couche précédente, la soustraie de la moyenne et la divise par l'écart type pour chaque échantillon du lot. Mais apparemment, je me trompe.
import numpy as np
import tensorflow as tf
if __name__ == "__main__":
# flattened tensor, batch size of 2
xnp = np.array([[1,2,3],[4,5,6]])
xtens = tf.constant(xnp,dtype=tf.float32)
nbatchnorm = tf.keras.layers.BatchNormalization()(xtens)
# tensorflow output
print(nbatchnorm)
# what I expect to see
xmean = np.mean(xnp,axis=1)
xstd = np.std(xnp,axis=1)
# set the mean to 0 and the standard deviation to 1 for each sample
normalized = (xnp - xmean.reshape(-1,1)) / xstd.reshape(-1,1)
print(normalized)
sortie :
tf.Tensor(
[[0.9995004 1.9990008 2.9985013]
[3.9980016 4.997502 5.9970026]], shape=(2, 3), dtype=float32)
[[-1.22474487 0. 1.22474487]
[-1.22474487 0. 1.22474487]]
Quelqu'un peut-il m'expliquer pourquoi ces sorties ne sont pas les mêmes ou du moins similaires ? Je ne vois pas en quoi cela normalise quoi que ce soit.