MeanVarianceNormalization

MeanVarianceNormalization - 13

Version

This version of the operator has been available since version 13.

Summary

A MeanVarianceNormalization Function: Perform mean variance normalization on the input tensor X using formula: (X-EX)/sqrt(E(X-EX)^2)

Function Body

The function definition for this operator.

<
  domain: "",
  opset_import: ["" : 18]
>
MeanVarianceNormalization <axes>(X) => (Y)
{
   Exponent = Constant <value: tensor = float {2}> ()
   Epsilon = Constant <value: tensor = float {1e-09}> ()
   axes = Constant <value_ints: ints = @axes> ()
   X_RM = ReduceMean (X, axes)
   EX_squared = Pow (X_RM, Exponent)
   X_squared = Pow (X, Exponent)
   E_Xsquared = ReduceMean (X_squared, axes)
   Variance = Sub (E_Xsquared, EX_squared)
   STD = Sqrt (Variance)
   X_variance = Sub (X, X_RM)
   Processed_STD = Add (STD, Epsilon)
   Y = Div (X_variance, Processed_STD)
}

Attributes

  • axes - INTS (default is [0, 2, 3]):

    A list of integers, along which to reduce. The default is to calculate along axes [0,2,3] for calculating mean and variance along each channel. Two variables with the same C-coordinate are associated with the same mean and variance.

Inputs

  • X (heterogeneous) - T:

    Input tensor

Outputs

  • Y (heterogeneous) - T:

    Output tensor

Type Constraints

  • T in ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) ):

    Constrain input and output types to all numeric tensors.

Examples

default

import numpy as np
import onnx

node = onnx.helper.make_node(
    "MeanVarianceNormalization", inputs=["X"], outputs=["Y"]
)

input_data = np.array(
    [
        [
            [[0.8439683], [0.5665144], [0.05836735]],
            [[0.02916367], [0.12964272], [0.5060197]],
            [[0.79538304], [0.9411346], [0.9546573]],
        ],
        [
            [[0.17730942], [0.46192095], [0.26480448]],
            [[0.6746842], [0.01665257], [0.62473077]],
            [[0.9240844], [0.9722341], [0.11965699]],
        ],
        [
            [[0.41356155], [0.9129373], [0.59330076]],
            [[0.81929934], [0.7862604], [0.11799799]],
            [[0.69248444], [0.54119414], [0.07513223]],
        ],
    ],
    dtype=np.float32,
)

# Calculate expected output data
data_mean = np.mean(input_data, axis=(0, 2, 3), keepdims=1)
data_mean_squared = np.power(data_mean, 2)
data_squared = np.power(input_data, 2)
data_squared_mean = np.mean(data_squared, axis=(0, 2, 3), keepdims=1)
std = np.sqrt(data_squared_mean - data_mean_squared)
expected_output = (input_data - data_mean) / (std + 1e-9)

expect(node, inputs=[input_data], outputs=[expected_output], name="test_mvn")

MeanVarianceNormalization - 9

Version

This version of the operator has been available since version 9.

Summary

A MeanVarianceNormalization Function: Perform mean variance normalization on the input tensor X using formula: <br/> (X-EX)/sqrt(E(X-EX)^2)

Function Body

The function definition for this operator.

&lt;
  domain: &#34;&#34;,
  opset_import: [&#34;&#34; : 9]
&gt;
MeanVarianceNormalization &lt;axes&gt;(X) =&gt; (Y)
{
   Exponent = Constant &lt;value: tensor = float {2}&gt; ()
   Epsilon = Constant &lt;value: tensor = float {1e-09}&gt; ()
   X_RM = ReduceMean &lt;axes: ints = @axes&gt; (X)
   EX_squared = Pow (X_RM, Exponent)
   X_squared = Pow (X, Exponent)
   E_Xsquared = ReduceMean &lt;axes: ints = @axes&gt; (X_squared)
   Variance = Sub (E_Xsquared, EX_squared)
   STD = Sqrt (Variance)
   X_variance = Sub (X, X_RM)
   Processed_STD = Add (STD, Epsilon)
   Y = Div (X_variance, Processed_STD)
}

Attributes

  • axes - INTS (default is [0, 2, 3]):

    A list of integers, along which to reduce. The default is to calculate along axes [0,2,3] for calculating mean and variance along each channel. Two variables with the same C-coordinate are associated with the same mean and variance.

Inputs

  • X (heterogeneous) - T:

    Input tensor

Outputs

  • Y (heterogeneous) - T:

    Output tensor

Type Constraints

  • T in ( tensor(double), tensor(float), tensor(float16) ):

    Constrain input and output types to all numeric tensors.