Tensorflow Batch normalization函數
覺得有用的話,歡迎一起討論相互學習~
最近在運行程序時需要使用到Batch normalization方法,雖然網上有很多資料,但是說法各異而且沒有完全准確的,很多使用了Tensorflow中TF.slim高層封裝,自己不是很明白。現在我將自己搜集的資料進行整理,便於以后查閱。
Tensorflow中實現BN算法的各種函數
- 在tensorflow中給出了幾種實現batch-norm的方法:
- tf.nn.batch_normalization 是一個低級的操作函數,調用者需要自己處理張量的平均值和方差。
- tf.nn.fused_batch_norm 是另一個低級的操作函數,和前者十分相似。不同之處在於它針對四維輸入張量進行了優化,這是卷積神經網絡中的常見情況。而前者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函數。