TensorFlow函數(shù):tf.layers.batch_normalization

2019-03-07 16:48 更新

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í)行.
以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)