LpNormalization#
Domain:
ai.onnxSince version: 22
Given a matrix, apply Lp-normalization along the provided axis.
The output is computed as: output = input / Lp_norm(input, axis).
When the Lp norm is zero (i.e., all elements along the axis are zero),
the output is defined to be zero to avoid division by zero.
Inputs
input (T): Input matrix
Outputs
output (T): Matrix after normalization
Attributes
axis (int): The axis on which to apply normalization, -1 mean last axis.
p (int): The order of the normalization, only 1 or 2 are supported.
Type Constraints
T: Constrain input and output types to float tensors. Allowed types: tensor(bfloat16), tensor(double), tensor(float), tensor(float16).
Examples#
test_cc_lpnormalization_axis0_p1
Node:
LpNormalization(x) -> (y)
Attributes:
axis = 0
p = 1
Inputs:
x: shape=(2, 2, 3), dtype=float32
[[[1., 2., 2.],
[3., 4., 0.]],
[[0., 5., 5.],
[6., 8., 0.]]]
Outputs:
y: shape=(2, 2, 3), dtype=float32
[[[1. , 0.2857143 , 0.2857143 ],
[0.33333334, 0.33333334, 0. ]],
[[0. , 0.71428573, 0.71428573],
[0.6666667 , 0.6666667 , 0. ]]]
test_cc_lpnormalization_default
Node:
LpNormalization(x) -> (y)
Inputs:
x: shape=(2, 2, 3), dtype=float32
[[[1., 2., 2.],
[3., 4., 0.]],
[[0., 5., 5.],
[6., 8., 0.]]]
Outputs:
y: shape=(2, 2, 3), dtype=float32
[[[0.33333334, 0.6666667 , 0.6666667 ],
[0.6 , 0.8 , 0. ]],
[[0. , 0.70710677, 0.70710677],
[0.6 , 0.8 , 0. ]]]
test_l1normalization_axis_0
Node:
LpNormalization(x) -> (y)
Attributes:
axis = 0
p = 1
Inputs:
x: shape=(2,), dtype=float32
[3., 4.]
Outputs:
y: shape=(2,), dtype=float32
[0.42857143, 0.5714286 ]
test_l1normalization_axis_1
Node:
LpNormalization(x) -> (y)
Attributes:
axis = 1
p = 1
Inputs:
x: shape=(2, 2), dtype=float32
[[3., 4.],
[6., 8.]]
Outputs:
y: shape=(2, 2), dtype=float32
[[0.42857143, 0.5714286 ],
[0.42857143, 0.5714286 ]]
test_l1normalization_axis_last
Node:
LpNormalization(x) -> (y)
Attributes:
axis = -1
p = 1
Inputs:
x: shape=(2, 2, 3), dtype=float32
[[[1., 2., 2.],
[3., 4., 0.]],
[[0., 5., 5.],
[6., 8., 0.]]]
Outputs:
y: shape=(2, 2, 3), dtype=float32
[[[0.2 , 0.4 , 0.4 ],
[0.42857143, 0.5714286 , 0. ]],
[[0. , 0.5 , 0.5 ],
[0.42857143, 0.5714286 , 0. ]]]
test_l2normalization_axis_0
Node:
LpNormalization(x) -> (y)
Attributes:
axis = 0
p = 2
Inputs:
x: shape=(2, 2, 3), dtype=float32
[[[1., 2., 2.],
[3., 4., 0.]],
[[0., 5., 5.],
[6., 8., 0.]]]
Outputs:
y: shape=(2, 2, 3), dtype=float32
[[[1. , 0.37139067, 0.37139067],
[0.4472136 , 0.4472136 , 0. ]],
[[0. , 0.9284767 , 0.9284767 ],
[0.8944272 , 0.8944272 , 0. ]]]
test_l2normalization_axis_1
Node:
LpNormalization(x) -> (y)
Attributes:
axis = 1
p = 2
Inputs:
x: shape=(2, 2), dtype=float32
[[3., 4.],
[6., 8.]]
Outputs:
y: shape=(2, 2), dtype=float32
[[0.6, 0.8],
[0.6, 0.8]]
Differences with previous version (1)#
SchemaDiff: LpNormalization (domain 'ai.onnx')
old version: 1
new version: 22
breaking: no
Type constraints:
changed ‘T’: added types: [‘tensor(bfloat16)’]