tf.layers.batch_normalization函數(shù)
tf.layers.batch_normalization(
inputs,
axis=-1,
momentum=0.99,
epsilon=0.001,
center=True,
scale=True,
beta_initializer=tf.zeros_initializer(),
gamma_initializer=tf.ones_initializer(),
moving_mean_initializer=tf.zeros_initializer(),
moving_variance_initializer=tf.ones_initializer(),
beta_regularizer=None,
gamma_regularizer=None,
beta_constraint=None,
gamma_constraint=None,
training=False,
trainable=True,
name=None,
reuse=None,
renorm=False,
renorm_clipping=None,
renorm_momentum=0.99,
fused=None,
virtual_batch_size=None,
adjustment=None
)
定義在:tensorflow/python/layers/normalization.py.
批量規(guī)范化層的功能接口.
參考:http://arxiv.org/abs/1502.03167
批量規(guī)范化指通過(guò)減少內(nèi)部協(xié)變量轉(zhuǎn)換來(lái)加速深度網(wǎng)絡(luò)訓(xùn)練.
注意:訓(xùn)練時(shí),需要更新moving_mean和moving_variance.默認(rèn)情況下,更新操作被放入tf.GraphKeys.UPDATE_OPS,因此需要將它們作為依賴(lài)項(xiàng)添加到train_op.此外,在獲取update_ops集合之前,請(qǐng)務(wù)必添加任何batch_normalization操作.否則,update_ops將為空,并且訓(xùn)練/推斷將無(wú)法正常工作.例如:
x_norm = tf.layers.batch_normalization(x, training=training)
# ...
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
train_op = optimizer.minimize(loss)
參數(shù):
- inputs:張量輸入.
- axis:一個(gè)int,應(yīng)該是規(guī)范化的軸(通常是特征軸);例如,在使用data_format="channels_first"的Convolution2D圖層之后,在BatchNormalization中設(shè)置axis=1為.
- momentum:移動(dòng)平均線(xiàn)的動(dòng)量.
- epsilon:小浮點(diǎn)數(shù)添加到方差以避免除以零.
- center:如果為T(mén)rue,則添加beta到規(guī)范化張量的偏移量;如果為False,則忽略beta.
- scale:如果為T(mén)rue,則乘以gamma;如果為False,則不使用gamma.當(dāng)下一層是線(xiàn)性的(例如,nn.relu)時(shí),這可以被禁用,因?yàn)榭s放可以由下一層完成.
- beta_initializer:beta權(quán)重的初始化程序.
- gamma_initializer:gamma權(quán)重的初始化程序.
- moving_mean_initializer:移動(dòng)平均值的初始化程序.
- moving_variance_initializer:移動(dòng)方差的初始化程序.
- beta_regularizer:β權(quán)量的可選正規(guī)化器.
- gamma_regularizer:gamma權(quán)重的可選正規(guī)化器.
- beta_constraint:由Optimizer更新后應(yīng)用于beta權(quán)重的可選投影函數(shù)(例如,用于實(shí)現(xiàn)層權(quán)重的范數(shù)約束或值約束).該函數(shù)必須將未投影的變量作為輸入,并且必須返回投影變量(必須具有相同的形狀).在進(jìn)行異步分布式培訓(xùn)時(shí),使用約束是不安全的.
- gamma_constraint:由Optimizer更新后應(yīng)用于gamma權(quán)量的可選投影功能.
- training:可以是Python布爾值或TensorFlow布爾標(biāo)量張量(例如,占位符);表示是否在訓(xùn)練模式下返回輸出(使用當(dāng)前批次的統(tǒng)計(jì)數(shù)據(jù)進(jìn)行規(guī)范化)或在推理模式下(使用移動(dòng)統(tǒng)計(jì)數(shù)據(jù)規(guī)范化);注意:確保正確設(shè)置此參數(shù),否則您的訓(xùn)練/推理將無(wú)法正常工作.
- trainable:Boolean,如果為T(mén)rue,也會(huì)將變量添加到圖集合GraphKeys.TRAINABLE_VARIABLES中(請(qǐng)參閱tf.Variable).
- name:String,圖層的名稱(chēng).
- reuse:Boolean,是否以同一名稱(chēng)重用前一層的權(quán)重.
- renorm:是否使用批量重整化(https://arxiv.org/abs/1702.03275).這會(huì)在培訓(xùn)期間增加額外的變量 對(duì)于此參數(shù)的任一值,推斷都是相同的.
- renorm_clipping:一個(gè)字典,可以將鍵'rmax','rmin','dmax'映射到用于剪輯重新校正的Tensors標(biāo)量.校正(r, d)被用作corrected_value = normalized_value * r + d,以r限幅為[RMIN,RMAX],和d為[-dmax,DMAX];丟失的rmax,rmin,dmax分別設(shè)定為inf,0,inf.
- renorm_momentum:動(dòng)量被用于更新移動(dòng)平均值和標(biāo)準(zhǔn)偏差,使用renorm;不同于momentum,這會(huì)影響訓(xùn)練,既不會(huì)太小(會(huì)增加噪音)也不會(huì)太大(這會(huì)產(chǎn)生過(guò)時(shí)的估計(jì));請(qǐng)注意,momentum仍然應(yīng)用于獲取推理的均值和方差.
- fused:如果為None或者True,則使用更快、更融合的實(shí)現(xiàn);如果為False,請(qǐng)使用系統(tǒng)推薦的實(shí)現(xiàn).
- virtual_batch_size:一個(gè)int,默認(rèn)情況下,virtual_batch_size是None,這表示在整個(gè)批次中執(zhí)行批量規(guī)范化;如果virtual_batch_size不是None,則執(zhí)行“Ghost Batch Normalization”,創(chuàng)建虛擬子批次,每個(gè)子批次分別進(jìn)行規(guī)范化(具有共享的gamma,beta和移動(dòng)統(tǒng)計(jì)數(shù)據(jù));必須在執(zhí)行期間劃分實(shí)際批量大小.
- adjustment:一個(gè)函數(shù),它包含輸入張量(動(dòng)態(tài))形狀的Tensor,并返回一對(duì)(scale, bias)以應(yīng)用于規(guī)范化值(在gamma和β之前),僅在訓(xùn)練期間.例如,如果axis == - 1,adjustment = lambda shape: ( tf.random_uniform(shape[-1:], 0.93, 1.07), tf.random_uniform(shape[-1:], -0.1, 0.1))則將規(guī)范化值向上或向下縮放7%,然后將結(jié)果移動(dòng)到最多0.1(對(duì)每個(gè)特征進(jìn)行獨(dú)立縮放和偏移,但在所有示例中共享),最后應(yīng)用gamma或beta;如果為None,不應(yīng)用調(diào)整;如果指定了virtual_batch_size,則無(wú)法指定.
返回:
輸出張量.
可能引發(fā)的異常:
- ValueError:如果啟用了急切(eager)執(zhí)行.
更多建議: