Dans tensorflow 1.4, j'ai trouvé deux fonctions qui font la normalisation par lots et elles se ressemblent:
Quelle fonction dois-je utiliser? Lequel est le plus stable?
Juste pour ajouter à la liste, il existe plusieurs autres façons de faire la norme de lot dans tensorflow:
tf.nn.batch_normalization
est une opération de bas niveau. L'appelant est responsable de gérer les tenseurs mean
et variance
eux-mêmes.tf.nn.fused_batch_norm
est un autre op de bas niveau, similaire au précédent. La différence est qu'il est optimisé pour les tenseurs d'entrée 4D, ce qui est le cas habituel dans les réseaux de neurones convolutifs. tf.nn.batch_normalization
accepte des tenseurs de tout rang supérieur à 1.tf.layers.batch_normalization
est un wrapper de haut niveau par rapport aux opérations précédentes. La plus grande différence est qu'il prend soin de créer et de gérer la tension courante et les tenseurs de variance, et appelle un op fusionné rapide lorsque cela est possible. Habituellement, cela devrait être le choix par défaut pour vous.tf.contrib.layers.batch_norm
est la première implémentation de la norme de traitement par lots, avant sa gradation vers l'API principale (c'est-à-dire tf.layers
). Son utilisation n'est pas recommandée car elle pourrait être supprimée dans les futures versions.tf.nn.batch_norm_with_global_normalization
est un autre op déprécié. Actuellement, délègue l'appel à tf.nn.batch_normalization
, mais susceptible d'être abandonné à l'avenir.keras.layers.BatchNormalization
, qui en cas de backend tensorflow appelle tf.nn.batch_normalization
.Comme indiqué dans doc , tf.contrib
est un module de contribution contenant du code volatil ou expérimental. Lorsque function
est terminé, il sera supprimé de ce module. Maintenant, il y en a deux, afin d'être compatible avec la version historique.
Ainsi, l'ancien tf.layers.batch_normalization
est recommandé.