2 votes

Quelqu'un peut-il expliquer le comportement de tf.keras.layers.BatchNormalization ?

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X