Skip to content

create_dl_layer_batch_normalizationCreateDlLayerBatchNormalizationCreateDlLayerBatchNormalizationcreate_dl_layer_batch_normalizationT_create_dl_layer_batch_normalizationπŸ”—

Short descriptionπŸ”—

create_dl_layer_batch_normalizationCreateDlLayerBatchNormalizationCreateDlLayerBatchNormalizationcreate_dl_layer_batch_normalizationT_create_dl_layer_batch_normalization β€” Create a batch normalization layer.

SignatureπŸ”—

create_dl_layer_batch_normalization( dl_layer DLLayerInput, string LayerName, string Momentum, number Epsilon, string Activation, attribute.name GenParamName, attribute.value GenParamValue, out dl_layer DLLayerBatchNorm )void CreateDlLayerBatchNormalization( const HTuple& DLLayerInput, const HTuple& LayerName, const HTuple& Momentum, const HTuple& Epsilon, const HTuple& Activation, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* DLLayerBatchNorm )static void HOperatorSet.CreateDlLayerBatchNormalization( HTuple DLLayerInput, HTuple layerName, HTuple momentum, HTuple epsilon, HTuple activation, HTuple genParamName, HTuple genParamValue, out HTuple DLLayerBatchNorm )def create_dl_layer_batch_normalization( dllayer_input: HHandle, layer_name: str, momentum: Union[float, str], epsilon: float, activation: str, gen_param_name: MaybeSequence[str], gen_param_value: MaybeSequence[Union[int, float, str]] ) -> HHandle

Herror T_create_dl_layer_batch_normalization( const Htuple DLLayerInput, const Htuple LayerName, const Htuple Momentum, const Htuple Epsilon, const Htuple Activation, const Htuple GenParamName, const Htuple GenParamValue, Htuple* DLLayerBatchNorm )

HDlLayer HDlLayer::CreateDlLayerBatchNormalization( const HString& LayerName, const HTuple& Momentum, double Epsilon, const HString& Activation, const HTuple& GenParamName, const HTuple& GenParamValue ) const

HDlLayer HDlLayer::CreateDlLayerBatchNormalization( const HString& LayerName, const HString& Momentum, double Epsilon, const HString& Activation, const HString& GenParamName, const HString& GenParamValue ) const

HDlLayer HDlLayer::CreateDlLayerBatchNormalization( const char* LayerName, const char* Momentum, double Epsilon, const char* Activation, const char* GenParamName, const char* GenParamValue ) const

HDlLayer HDlLayer::CreateDlLayerBatchNormalization( const wchar_t* LayerName, const wchar_t* Momentum, double Epsilon, const wchar_t* Activation, const wchar_t* GenParamName, const wchar_t* GenParamValue ) const (Windows only)

HDlLayer HDlLayer.CreateDlLayerBatchNormalization( string layerName, HTuple momentum, double epsilon, string activation, HTuple genParamName, HTuple genParamValue )

HDlLayer HDlLayer.CreateDlLayerBatchNormalization( string layerName, string momentum, double epsilon, string activation, string genParamName, string genParamValue )

DescriptionπŸ”—

The operator create_dl_layer_batch_normalizationCreateDlLayerBatchNormalization creates a batch normalization layer whose handle is returned in DLLayerBatchNormDLLayerBatchNormdllayer_batch_norm. Batch normalization is used to improve the performance and stability of a neural network during training. The mean and variance of each input activation are calculated for each batch and the input values are transformed to have zero mean and unit variance. Moreover, a linear scale and shift transformation is learned. During training, to take all samples into account, the batch-wise calculated mean and variance values are combined with a Momentummomentummomentum into running mean and running variance, where \(i\) denotes the iteration index:

\[\begin{eqnarray*} running\_mean (i) &=& (1 - \textrm{Momentum}) * mean (i) + \textrm{Momentum} * running\_mean (i-1),\\ running\_variance (i) &=& (1 - \textrm{Momentum}) * variance (i) + \textrm{Momentum} * running\_variance (i-1). \end{eqnarray*}\]

To affect the mean and variance values you can set the following options for Momentummomentummomentum:

  • Given number: For example: 0.90.9. This is the default and recommended option.

    Restriction: 00 \(\leq\) Momentummomentummomentum \(<\) 11

  • 'auto'"auto": Combines mean and variance values by a cumulative moving average. This is only recommended in case the parameters of all previous layers in the network are frozen, i.e., have a learning rate of 00.

  • 'freeze'"freeze": Stops the adjustment of the mean and variance and their values stay fixed. In this case, the mean and variance are used during training for normalizing a batch, analogously to how the batch normalization operates during inference. The parameters of the linear scale and shift transformation, however, remain learnable.

Epsilonepsilonepsilon is a small offset to the variance and used to control the numerical stability. Usually its default value should be adequate.

The parameter DLLayerInputDLLayerInputdllayer_input determines the feeding input layer.

The parameter LayerNamelayerNamelayer_name sets an individual layer name. Note that if creating a model using create_dl_modelCreateDlModel each layer of the created network must have a unique name.

The parameter Activationactivationactivation determines whether an activation is performed after the batch normalization in order to optimize the runtime performance.

  • 'relu'"relu": perform a ReLU activation after the batch normalization.

    It is possible to specify an upper bound to the ReLU operation (see create_dl_layer_activationCreateDlLayerActivation) via the generic parameter 'upper_bound'"upper_bound".

  • 'none'"none": no activation operation is performed.

It is not possible to specify a leaky ReLU, sigmoid or tanh activation function. Use create_dl_layer_activationCreateDlLayerActivation instead.

The following generic parameters GenParamNamegenParamNamegen_param_name and the corresponding values GenParamValuegenParamValuegen_param_value are supported:

  • 'bias_filler'"bias_filler": See create_dl_layer_convolutionCreateDlLayerConvolution for a detailed explanation of this parameter and its values.

    List of values: 'xavier'"xavier", 'msra'"msra", 'const'"const".

    Default: 'const'"const"

  • 'bias_filler_const_val'"bias_filler_const_val": Constant value.

    Restriction: 'bias_filler'"bias_filler" must be set to 'const'"const".

    Default: 00

  • 'bias_filler_variance_norm'"bias_filler_variance_norm": See create_dl_layer_convolutionCreateDlLayerConvolution for a detailed explanation of this parameter and its values.

    List of values: 'norm_out'"norm_out", 'norm_in'"norm_in", 'norm_average'"norm_average", or constant value (in combination with 'bias_filler'"bias_filler" = 'msra'"msra").

    Default: 'norm_in'"norm_in"

  • 'bias_term'"bias_term": Determines whether the created batch normalization layer has a bias term ('true'"true") or not ('false'"false").

    Default: 'true'"true"

  • 'is_inference_output'"is_inference_output": Determines whether apply_dl_modelApplyDlModel will include the output of this layer in the dictionary DLResultBatchDLResultBatchdlresult_batch even without specifying this layer in Outputsoutputsoutputs ('true'"true") or not ('false'"false").

    Default: 'false'"false"

  • 'learning_rate_multiplier'"learning_rate_multiplier": Multiplier for the learning rate for this layer that is used during training. If 'learning_rate_multiplier'"learning_rate_multiplier" is set to 0.00.0, the layer is skipped during training.

    Default: 1.01.0

  • 'learning_rate_multiplier_bias'"learning_rate_multiplier_bias": Multiplier for the learning rate of the bias term. The total bias learning rate is the product of 'learning_rate_multiplier_bias'"learning_rate_multiplier_bias" and 'learning_rate_multiplier'"learning_rate_multiplier".

    Default: 1.01.0

  • 'upper_bound'"upper_bound": Float value defining an upper bound for a rectified linear unit. If the activation layer is part of a model, which has been created using create_dl_modelCreateDlModel, the upper bound can be unset. To do so, use set_dl_model_layer_paramSetDlModelLayerParam and set an empty tuple for 'upper_bound'"upper_bound".

    Default: [][]

  • 'weight_filler'"weight_filler": See create_dl_layer_convolutionCreateDlLayerConvolution for a detailed explanation of this parameter and its values.

    List of values: 'xavier'"xavier", 'msra'"msra", 'const'"const".

    Default: 'const'"const"

  • 'weight_filler_const_val'"weight_filler_const_val": See create_dl_layer_convolutionCreateDlLayerConvolution for a detailed explanation of this parameter and its values.

    Default: 1.01.0

  • 'weight_filler_variance_norm'"weight_filler_variance_norm": See create_dl_layer_convolutionCreateDlLayerConvolution for a detailed explanation of this parameter and its values.

    List of values: 'norm_in'"norm_in", 'norm_out'"norm_out", 'norm_average'"norm_average", or constant value (in combination with 'weight_filler'"weight_filler" = 'msra'"msra").

    Default: 'norm_in'"norm_in"

Certain parameters of layers created using this operator create_dl_layer_batch_normalizationCreateDlLayerBatchNormalization can be set and retrieved using further operators. The following tables give an overview, which parameters can be set using set_dl_model_layer_paramSetDlModelLayerParam and which ones can be retrieved using get_dl_model_layer_paramGetDlModelLayerParam or get_dl_layer_paramGetDlLayerParam. Note, the operators set_dl_model_layer_paramSetDlModelLayerParam and get_dl_model_layer_paramGetDlModelLayerParam require a model created by create_dl_modelCreateDlModel.

Layer Parameters set get
'activation_mode'"activation_mode" (Activationactivationactivation) x
'epsilon'"epsilon" (Epsilonepsilonepsilon) x
'input_layer'"input_layer" (DLLayerInputDLLayerInputdllayer_input) x
'momentum'"momentum" (Momentummomentummomentum) x x
'name'"name" (LayerNamelayerNamelayer_name) x x
'output_layer'"output_layer" (DLLayerBatchNormDLLayerBatchNormdllayer_batch_norm) x
'shape'"shape" x
'type'"type" x
Generic Layer Parameters set get
'bias_filler'"bias_filler" x x
'bias_filler_const_val'"bias_filler_const_val" x x
'bias_filler_variance_norm'"bias_filler_variance_norm" x x
'bias_term'"bias_term" x
'is_inference_output'"is_inference_output" x x
'learning_rate_multiplier'"learning_rate_multiplier" x x
'learning_rate_multiplier_bias'"learning_rate_multiplier_bias" x x
'num_trainable_params'"num_trainable_params" x
'upper_bound'"upper_bound" x x
'weight_filler'"weight_filler" x x
'weight_filler_const_val'"weight_filler_const_val" x x
'weight_filler_variance_norm'"weight_filler_variance_norm" x x

Execution informationπŸ”—

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Processed without parallelization.

ParametersπŸ”—

DLLayerInputDLLayerInputdllayer_input (input_control) dl_layer β†’ (handle)HTuple (HHandle)HDlLayer, HTuple (IntPtr)HHandleHtuple (handle)

Feeding layer.

LayerNamelayerNamelayer_name (input_control) string β†’ (string)HTuple (HString)HTuple (string)strHtuple (char*)

Name of the output layer.

Momentummomentummomentum (input_control) string β†’ (string / real)HTuple (HString / double)HTuple (string / double)Union[float, str]Htuple (char* / double)

Momentum.

Default: 0.90.9
List of values: 0.9, 0.99, 0.999, 'auto', 'freeze'0.9, 0.99, 0.999, "auto", "freeze"

Epsilonepsilonepsilon (input_control) number β†’ (real)HTuple (double)HTuple (double)floatHtuple (double)

Variance offset.

Default: 0.00010.0001

Activationactivationactivation (input_control) string β†’ (string)HTuple (HString)HTuple (string)strHtuple (char*)

Optional activation function.

Default: 'none'"none"
List of values: 'none', 'relu'"none", "relu"

GenParamNamegenParamNamegen_param_name (input_control) attribute.name(-array) β†’ (string)HTuple (HString)HTuple (string)MaybeSequence[str]Htuple (char*)

Generic input parameter names.

Default: [][]
List of values: 'bias_filler', 'bias_filler_const_val', 'bias_filler_variance_norm', 'bias_term', 'is_inference_output', 'learning_rate_multiplier', 'learning_rate_multiplier_bias', 'upper_bound', 'weight_filler', 'weight_filler_const_val', 'weight_filler_variance_norm'"bias_filler", "bias_filler_const_val", "bias_filler_variance_norm", "bias_term", "is_inference_output", "learning_rate_multiplier", "learning_rate_multiplier_bias", "upper_bound", "weight_filler", "weight_filler_const_val", "weight_filler_variance_norm"

GenParamValuegenParamValuegen_param_value (input_control) attribute.value(-array) β†’ (string / integer / real)HTuple (HString / Hlong / double)HTuple (string / int / long / double)MaybeSequence[Union[int, float, str]]Htuple (char* / Hlong / double)

Generic input parameter values.

Default: [][]
Suggested values: 'xavier', 'msra', 'const', 'nearest_neighbor', 'bilinear', 'norm_in', 'norm_out', 'norm_average', 'true', 'false', 1.0, 0.9, 0.0"xavier", "msra", "const", "nearest_neighbor", "bilinear", "norm_in", "norm_out", "norm_average", "true", "false", 1.0, 0.9, 0.0

DLLayerBatchNormDLLayerBatchNormdllayer_batch_norm (output_control) dl_layer β†’ (handle)HTuple (HHandle)HDlLayer, HTuple (IntPtr)HHandleHtuple (handle)

Batch normalization layer.

ExampleπŸ”—

(HDevelop)

create_dl_layer_input ('input', [224,224,3], [], [], DLLayerInput)
* In practice, one typically sets ['bias_term'], ['false'] for a convolution
* that is directly followed by a batch normalization layer.
create_dl_layer_convolution (DLLayerInput, 'conv1', 3, 1, 1, 64, 1, \
                             'none', 'none', ['bias_term'], ['false'], \
                             DLLayerConvolution)
create_dl_layer_batch_normalization (DLLayerConvolution, 'bn1', 0.9, \
                                     0.0001, 'none', [], [], \
                                     DLLayerBatchNorm)

Combinations with other operatorsπŸ”—

Combinations

Possible predecessors

create_dl_layer_convolutionCreateDlLayerConvolution

Possible successors

create_dl_layer_activationCreateDlLayerActivation, create_dl_layer_convolutionCreateDlLayerConvolution

ReferencesπŸ”—

Sergey Ioffe and Christian Szegedy, β€œBatch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift,” Proceedings of the 32nd International Conference on Machine Learning, (ICML) 2015, Lille, France, 6-11 July 2015, pp. 448–456

ModuleπŸ”—

Deep Learning Professional