web-dev-qa-db-fra.com

Quelle est la bonne fonction de normalisation par lots dans Tensorflow?

Dans tensorflow 1.4, j'ai trouvé deux fonctions qui font la normalisation par lots et elles se ressemblent:

  1. tf.layers.batch_normalization ( lien )
  2. tf.contrib.layers.batch_norm ( lien )

Quelle fonction dois-je utiliser? Lequel est le plus stable?

19
KimHee

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.
  • Enfin, il y a aussi la couche Keras keras.layers.BatchNormalization , qui en cas de backend tensorflow appelle tf.nn.batch_normalization.
45
Maxim

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é.

5
dxf