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

2018-08-17 14:31 更新

tf.layers.BatchNormalization函數(shù)

BatchNormalization類

繼承自: Layer

定義在:tensorflow/python/layers/normalization.py.

來自http://arxiv.org/abs/1502.03167的批處理規(guī)范化層.

批處理規(guī)范化指的是通過減少內(nèi)部協(xié)變量轉(zhuǎn)換來加速深度網(wǎng)絡(luò)訓(xùn)練

參數(shù):

  • axis:應(yīng)標(biāo)準(zhǔn)化的軸或軸的int列表,通常是軸的特征,例如,在一個(gè)具有data_format="channels_first"的Conv2D圖層后面,設(shè)置axis=1.如果提供了軸列表,則axis中的每個(gè)軸將同時(shí)規(guī)范化;默認(rèn)值是-1,它使用最后一個(gè)軸.注意:在使用多軸批處理范數(shù)的情況下,beta,gamma,moving_mean,和moving_variance變量與輸入張量具有相同的秩,所有縮減(非軸)維度中的維度大小為1).
  • momentum:移動(dòng)平均值的動(dòng)量.
  • epsilon:添加到方差的小浮點(diǎn)數(shù),以避免除以零.
  • center:如果為True,則將beta的偏移量添加到標(biāo)準(zhǔn)化張量;如果為False,則忽略beta.
  • scale:如果為True,則乘以gamma;如果為False,則不使用gamma.當(dāng)下一層是線性的(例如,nn.relu)時(shí),可以禁用此操作,因?yàn)榭s放可以由下一層完成.
  • beta_initializer:beta權(quán)重的初始值設(shè)定項(xiàng).
  • gamma_initializer:gamma權(quán)重的初始值設(shè)定項(xiàng).
  • moving_mean_initializer:移動(dòng)平均值的初始值設(shè)定項(xiàng).
  • moving_variance_initializer:移動(dòng)方差的初始值設(shè)定項(xiàng).
  • beta_regularizer:beta權(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)重的可選投影功能.
  • renorm:是否使用批量重規(guī)范化(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:使用renorm將動(dòng)量(momentum)用于更新移動(dòng)手段和標(biāo)準(zhǔn)偏差;與動(dòng)量不同的是,這會(huì)影響訓(xùn)練,既不會(huì)太小(會(huì)增加噪音)也不會(huì)太大(這會(huì)產(chǎn)生過時(shí)的估計(jì));請(qǐng)注意,動(dòng)量仍然應(yīng)用于獲取推理的均值和方差.
  • fused:如果為None或者True,則盡可能使用更快,更融合的實(shí)現(xiàn);如果為False,請(qǐng)使用系統(tǒng)推薦的實(shí)現(xiàn).
  • trainable:Boolean,如果為True,則還將變量添加到圖集合GraphKeys.TRAINABLE_VARIABLES中(請(qǐng)參閱tf.Variable).
  • virtual_batch_size:一個(gè)int,默認(rèn)情況下,virtual_batch_size是None,這表示在整個(gè)批次中執(zhí)行批量標(biāo)準(zhǔn)化.如果virtual_batch_size不是None,則執(zhí)行“Ghost Batch Normalization”,創(chuàng)建虛擬子批次,每個(gè)子批次分別進(jìn)行標(biāo)準(zhǔn)化(具有共享的gamma,beta和移動(dòng)統(tǒng)計(jì)數(shù)據(jù)).必須在執(zhí)行期間劃分實(shí)際批量大小.
  • adjustment:一個(gè)函數(shù),它采用包含輸入張量的(動(dòng)態(tài))形狀Tensor并返回一對(duì)(scale, bias),以應(yīng)用于標(biāo)準(zhǔn)化值(在gamma和beta之前),僅在訓(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)),則將標(biāo)準(zhǔn)化值向上或向下縮放7%,然后將結(jié)果移動(dòng)到最多0.1(對(duì)每個(gè)特征進(jìn)行獨(dú)立縮放和偏移,但在所有示例中共享),最后應(yīng)用gamma或beta;如果為None,則不應(yīng)用調(diào)整;如果指定了virtual_batch_size,則無法指定.
  • name:字符串,圖層的名稱.

屬性

  • activity_regularizer

    可選的正則化函數(shù)用于該層的輸出.

  • dtype
  • graph
  • input

    檢索圖層的輸入張量.

    僅適用于圖層只有一個(gè)輸入的情況,即它是否連接到一個(gè)輸入圖層.

    返回:

    輸入張量或輸入張量列表.

    可能引發(fā)的異常:

    • AttributeError:如果圖層連接到多個(gè)輸入圖層.
    • RuntimeError:如果在Eager模式下調(diào)用.
    • AttributeError:如果未找到入站節(jié)點(diǎn).
  • input_shape

    檢索圖層的輸入形狀.

    僅適用于圖層只有一個(gè)輸入,即它是否連接到一個(gè)傳入層,或者所有輸入具有相同形狀的情況.

    返回:

    輸入形狀,作為整數(shù)形狀元組(或形狀元組列表,每個(gè)輸入張量一個(gè)元組).

    可能引發(fā)的異常:

    • AttributeError:如果圖層沒有定義的input_shape.
    • RuntimeError:如果在Eager模式下調(diào)用.
  • losses

    與此Layer相關(guān)的損失.

    請(qǐng)注意,在急切執(zhí)行時(shí),獲取此屬性會(huì)計(jì)算正規(guī)則.使用圖形執(zhí)行時(shí),已經(jīng)創(chuàng)建了變量正則化運(yùn)算,并且只是在這里返回.

    返回:

    張量列表.

  • name
  • non_trainable_variables
  • non_trainable_weights
  • output

    檢索圖層的輸出張量.

    僅適用于圖層只有一個(gè)輸出,即它是否連接到一個(gè)輸入層.

    返回:

    輸出張量或輸出張量列表.

    可能引發(fā)的異常:

    • AttributeError:如果圖層連接到多個(gè)輸入圖層.
    • RuntimeError:如果在Eager模式下調(diào)用.
  • output_shape

    檢索圖層的輸出形狀.

    僅適用于圖層具有一個(gè)輸出,或者所有輸出具有相同形狀的情況.

    返回:

    輸出形狀,作為整數(shù)形狀元組(或形狀元組列表,每個(gè)輸出張量一個(gè)元組).

    可能引發(fā)的異常:

    • AttributeError:如果圖層沒有定義的輸出形狀.
    • RuntimeError:如果在Eager模式下調(diào)用.
  • scope_name
  • trainable_variables
  • trainable_weights
  • updates
  • variables

    返回所有圖層變量/權(quán)重的列表.

    返回:

    變量列表.

  • weights

    返回所有圖層變量/權(quán)重的列表.

    返回:

    變量列表.

方法

  • __init__
    __init__(
        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,
        renorm=False,
        renorm_clipping=None,
        renorm_momentum=0.99,
        fused=None,
        trainable=True,
        virtual_batch_size=None,
        adjustment=None,
        name=None,
        **kwargs
    )

    初始化自我.

  • __call__
    __call__(
        inputs,
        *args,
        **kwargs
    )

    包裝call,應(yīng)用預(yù)處理和后處理步驟.

    參數(shù):

    • inputs:輸入張量.
    • *args:要傳遞給self.call的其他位置參數(shù).
    • **kwargs:要傳遞給self.call的其他關(guān)鍵字參數(shù).注意:kwarg scope保留供圖層使用.

    返回:

    輸出張量.

    注意:- 如果圖層的call方法采用scope關(guān)鍵字參數(shù),則此參數(shù)將自動(dòng)設(shè)置為當(dāng)前變量范圍.- 如果圖層的call方法采用mask參數(shù)(如某些Keras圖層那樣),則其默認(rèn)值將設(shè)置為inputs前一層生成的蒙版(如果input確實(shí)來自生成相應(yīng)蒙版的圖層,即它是否來自具有掩蔽支持的Keras層).

    可能引發(fā)的異常:

    • ValueError:如果圖層的call方法返回None(無效值).
  • __deepcopy__
    __deepcopy__(memo)
  • add_loss
    add_loss(
        losses,
        inputs=None
    )

    添加損失張量,可能取決于圖層輸入.

    一些損失(例如,活動(dòng)正則化損失)可能取決于調(diào)用層時(shí)傳遞的輸入.因此,當(dāng)在不同的輸入a和b上重用同一層時(shí),在layer.losses中的一些條目可以取決于a而另外一些取決于b.此方法自動(dòng)跟蹤依賴性.

    該get_losses_for方法允許檢索與特定輸入集相關(guān)的損失.

    請(qǐng)注意,急切執(zhí)行時(shí)不支持add_loss.相反,可以通過add_variable添加變量正則化器.不直接支持活動(dòng)正規(guī)化(但可以從Layer.call()中返回此類損失).

    參數(shù):

    • losses:損失張量,或張量/列表的張量.
    • inputs:如果傳遞了除None以外的任何內(nèi)容,則表示損失是以某些層的輸入為條件的,因此它們只應(yīng)在這些輸入可用的地方運(yùn)行.例如,活動(dòng)正規(guī)化損失就是這種情況.如果None通過,則假定損失是無條件的,并且將應(yīng)用于層的所有數(shù)據(jù)流(例如,權(quán)重正則化損失).

    可能引發(fā)的異常:

    • RuntimeError:如果在Eager模式下調(diào)用.
  • add_update
    add_update(
        updates,
        inputs=None
    )

    添加更新操作,可能依賴于圖層輸入.

    權(quán)重更新(例如,BatchNormalization層中移動(dòng)均值和方差的更新)可能取決于調(diào)用圖層時(shí)傳遞的輸入.因此,當(dāng)在不同的輸入a和b上重用同一層時(shí),在layer.updates中的一些條目可以取決于a而另外一些取決于b.此方法自動(dòng)跟蹤依賴性.

    該get_updates_for方法允許檢索與特定輸入集相關(guān)的更新.

    在Eager模式下忽略此調(diào)用.

    參數(shù):

    • updates:更新操作,或更新操作的列表/元組.
    • inputs:如果傳遞了除None之外的任何內(nèi)容,則表示更新是以某些層的輸入為條件的,因此它們只應(yīng)在這些輸入可用的地方運(yùn)行.例如,BatchNormalization更新就是這種情況.如果為None,則無條件地考慮更新,并且您有責(zé)任確保它們可能具有的任何依賴性在運(yùn)行時(shí)可用.步數(shù)計(jì)數(shù)器可能屬于此類別.
  • add_variable
    add_variable(
        name,
        shape,
        dtype=None,
        initializer=None,
        regularizer=None,
        trainable=True,
        constraint=None,
        partitioner=None
    )

    向圖層添加新變量,或獲取現(xiàn)有變量;返回它.

    參數(shù):

    • name: 變量的名稱.
    • shape:變量的形狀.
    • dtype:變量的類型,默認(rèn)為self.dtype或float32.
    • initializer:初始化程序?qū)嵗?可調(diào)用).
    • regularizer:regularrizer實(shí)例(可調(diào)用).
    • trainable:變量是否應(yīng)該是圖層的“trainable_variables”(例如,變量,偏差)或“non_trainable_variables”(例如,BatchNorm mean,stddev)的一部分.注意,如果當(dāng)前變量范圍被標(biāo)記為不可訓(xùn)練,則忽略此參數(shù),并且任何添加的變量也標(biāo)記為不可訓(xùn)練.
    • constraint:約束實(shí)例(可調(diào)用).
    • partitioner:(可選)分區(qū)程序?qū)嵗?可調(diào)用).如果提供,則在創(chuàng)建請(qǐng)求的變量時(shí),它將根據(jù)partitioner分成多個(gè)分區(qū).在這種情況下,返回一個(gè)PartitionedVariable實(shí)例.可用的分區(qū)包括tf.fixed_size_partitioner和tf.variable_axis_size_partitioner.

    返回:

    創(chuàng)建的變量.通常是一個(gè)Variable或一個(gè)ResourceVariable實(shí)例.如果partitioner不是None,則返回PartitionedVariable實(shí)例.

    可能引發(fā)的異常:

    • RuntimeError:如果使用分區(qū)變量正則化調(diào)用并且啟用了急切執(zhí)行.
  • apply
    apply(
        inputs,
        *args,
        **kwargs
    )

    在輸入上應(yīng)用圖層.

    這只是包裝self.__call__.

    參數(shù):

    • inputs:輸入張量.
    • *args:要傳遞給self.call的其他位置參數(shù).
    • **kwargs:要傳遞給self.call的其他關(guān)鍵字參數(shù).

    返回:

    輸出張量.

  • build
    build(input_shape)

    創(chuàng)建圖層的變量.

  • call
    call(
        inputs,
        training=False
    )

    圖層的邏輯就在這里.

    參數(shù):

    • inputs:輸入張量.
    • **kwargs:其他關(guān)鍵字參數(shù).

    返回:

    輸出張量.

  • compute_output_shape
    compute_output_shape(input_shape)

    在給定輸入形狀的情況下計(jì)算圖層的輸出形狀.

    參數(shù):

    • input_shape:一個(gè)TensorShape(可能是嵌套的元組).它不需要完全定義(例如批量大小可能是未知的).

    返回:

    一個(gè)TensorShape(可能是嵌套的元組).

    可能引發(fā)的異常:

    • TypeError:如果input_shape不是TensorShape(可能是嵌套的元組).
    • ValueError:如果input_shape不完整或與圖層不兼容.
  • count_params
    count_params()

    計(jì)算組成權(quán)重的標(biāo)量總數(shù).

    返回:

    整數(shù)計(jì)數(shù).

    可能引發(fā)的異常:

    • ValueError:如果尚未構(gòu)建圖層(在這種情況下,其權(quán)重尚未定義).
  • get_input_at
    get_input_at(node_index)

    檢索給定節(jié)點(diǎn)處的層的輸入張量.

    參數(shù):

    • node_index:Integer,從中檢索屬性的節(jié)點(diǎn)的索引.例如,node_index=0將對(duì)應(yīng)于第一次調(diào)用圖層.

    返回:

    張量(如果圖層有多個(gè)輸入,則為張量列表).

    可能引發(fā)的異常:

    • RuntimeError:如果在Eager模式下調(diào)用.
  • get_input_shape_at
    get_input_shape_at(node_index)

    檢索給定節(jié)點(diǎn)處的圖層的輸入形狀.

    參數(shù):

    • node_index:Integer,從中檢索屬性的節(jié)點(diǎn)的索引.例如,node_index=0將對(duì)應(yīng)于第一次調(diào)用圖層.

    返回:

    形狀元組(如果圖層有多個(gè)輸入,則為形狀元組??列表).

    可能引發(fā)的異常:

    • RuntimeError:如果在Eager模式下調(diào)用.
  • get_losses_for
    get_losses_for(inputs)

    檢索與特定輸入集相關(guān)的損失.

    參數(shù):

    • inputs:輸入張量或輸入張量的列表/元組.

    返回:

    依賴于inputs的層的損失張量列表.

    可能引發(fā)的異常:

    • RuntimeError:如果在Eager模式下調(diào)用.
  • get_output_at
    get_output_at(node_index)

    檢索給定節(jié)點(diǎn)處的圖層的輸出張量.

    參數(shù):

    • node_index:Integer,從中檢索屬性的節(jié)點(diǎn)的索引.例如,node_index=0將對(duì)應(yīng)于第一次調(diào)用圖層.

    返回:

    張量(如果圖層有多個(gè)輸出,則為張量列表).

    可能引發(fā)的異常:

    • RuntimeError:如果在Eager模式下調(diào)用.
  • get_output_shape_at
    get_output_shape_at(node_index)

    檢索給定節(jié)點(diǎn)處圖層的輸出形狀.

    參數(shù):

    • node_index:Integer,從中檢索屬性的節(jié)點(diǎn)的索引.例如,node_index=0將對(duì)應(yīng)于第一次調(diào)用圖層.

    返回:

    形狀元組(如果圖層具有多個(gè)輸出,則為形狀元組??列表).

    可能引發(fā)的異常:

    • RuntimeError:如果在Eager模式下調(diào)用.
  • get_updates_for
    get_updates_for(inputs)

    檢索與特定輸入集相關(guān)的更新.

    參數(shù):

    • inputs:輸入張量或輸入張量的列表/元組.

    返回:

    依賴于inputs的層的更新操作列表.

    可能引發(fā)的異常:

    • RuntimeError:如果在Eager模式下調(diào)用.
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)