0

我想在Tensorflow中建立一個廣義的批量標準化函數。尺寸批量標準化

我在這個article學習批量標準化,我發現很親切。

我與規模的β變量的尺寸的問題:在我的情況下批標準化被施加到每個卷積層的每個激活,因此,如果我有作爲卷積層一個的輸出與尺寸tersor:

[57,57,96] 

我需要規模測試具有相同的尺寸卷積層輸出,是否正確?

這裏是我的功能,該程序的作品,但我不知道是否是正確的

def batch_normalization_layer(batch): 
    # Calculate batch mean and variance 
    batch_mean, batch_var = tf.nn.moments(batch, axes=[0, 1, 2]) 

    # Apply the initial batch normalizing transform 
    scale = tf.Variable(tf.ones([batch.get_shape()[1],batch.get_shape()[2],batch.get_shape()[3]])) 
    beta = tf.Variable(tf.zeros([batch.get_shape()[1],batch.get_shape()[2],batch.get_shape()[3]])) 

    normalized_batch = tf.nn.batch_normalization(batch, batch_mean, batch_var, beta, scale, 0.0001) 

    return normalized_batch 

回答

1

tf.nn.batch_normalization文檔:

均值,方差,偏移量和規模都有望屬於兩種形狀之一: 形狀:

在所有通用性中,它們可以具有與 輸入x相同的維數,並且具有相同的大小es表示對於不是 (「深度」維度)歸一化的維度,而對於其他規範化的 維度爲1。在這種情況下的平均值和方差 通常是訓練期間tf.nn.moments(...,keep_dims = True) 的輸出,或者是推理期間的平均值。

在其中「深度」尺寸在 輸入張量x的最後尺寸 常見情況下,它們可以是相同的尺寸 的一維張量作爲「深度」尺寸。例如對於完全連接層的普通 [批處理,深度]佈局以及卷積的[批處理,高度,寬度,深度]。在這種情況下的平均值和方差 通常是 訓練期間tf.nn.moments(...,keep_dims = False)的輸出,或者在推斷期間運行其平均值。

使用您的值(scale = 1.0和offset = 0),您也可以只提供值None