tensorflow中Batch Normalization的不同实现

在tensorflow中,Batch Normalization有不同实现

tf.layers.BatchNormalization

tf.layers.batch_normalization

tf.keras.layers.BatchNormalization

tf.nn.batch_normalization

上述4个API按层次可分为两类:

高级API:tf.layers.BatchNormalization,tf.layers.batch_normalization,tf.keras.layers.BatchNormalization

低级API:tf.nn.batch_normalization

上述4个API按行为可分为两类:

TensorFlow API:tf.layers.BatchNormalization、tf.layers.batch_normalization、tf.nn.batch_normalization
Keras API:tf.keras.layers.BatchNormalization
 

keras.layers.BatchNormalization会指向site_packages/keras/layers/normalization.py
tf.keras.layers.BatchNormalization会指向site_packages/tensorflow/python/keras/layers/normalization.py

通过查看源代码,发现实现完全不同

https://blog.csdn.net/jiruiyang/article/details/77202674

tensorflow中实现BN算法的各种函数

tf.nn.batch_normalization()是一个低级的操作函数,调用者需要自己处理张量的平均值和方差

tf.nn.fused_batch_norm是另一个低级的操作函数,和前者十分相似,不同之处在于它针对4维输入张量进行了优化,这是卷积神经网络中常见的情况,而前者tf.nn.batch_normalization则接受任何等级大于1的张量

tf.layers.batch_normalization是对先前操作的高级封装,最大的不同在于它负责创建和管理运行张量的均值和方差,并尽可可能地快速融合计算,通常,这个函数应该是你的默认选择

tf.contrib.layers.batch_norm是batch_norm的早期实现,其升级的核心api版本为(tf.layers.batch_normalization),不推荐使用它,因为它可能会在未来的版本中丢失.

tf.nn.batch_norm_with_global_normalization是另一个被弃用的操作,现在这个函数会委托给tf.nn.batch_normalization执行,在未来这个函数会被放弃

keras.layers.BatchNormalization是BN算法的keras实现,这个函数在后端会调用tensorflow的tf.nn.batch_normalization函数

 

 

你可能感兴趣的:(tensorflow中Batch Normalization的不同实现)