oneflow.norm¶
-
oneflow.
norm
(input, p='fro', dim=None, keepdim=False, dtype=None)¶ Returns the matrix norm or vector norm of a given tensor.
The documentation is referenced from: https://pytorch.org/docs/1.10/generated/torch.norm.html.
Warning
Use
oneflow.linalg.norm()
, instead, oroneflow.linalg.vector_norm()
when computing vector norms andoneflow.linalg.matrix_norm()
when computing matrix norms. Note, however, the signature for these functions is slightly different than the signature for oneflow.norm.- Parameters
input (Tensor) – The input tensor. Its data type must be either a floating point or complex type. For complex inputs, the norm is calculated using the absolute value of each element. If the input is complex and neither
dtype
norout
is specified, the result’s data type will be the corresponding floating point type (e.g. float ifinput
is complexfloat).p (int, float, inf, -inf, 'fro', 'nuc', optional) –
the order of norm. Default:
'fro'
The following norms can be calculated:ord
matrix norm
vector norm
’fro’
Frobenius norm
–
‘nuc’
nuclear norm
–
Number
–
sum(abs(x)**p)**(1./p)
The vector norm can be calculated across any number of dimensions. The corresponding dimensions of
input
are flattened into one dimension, and the norm is calculated on the flattened dimension.Frobenius norm produces the same result as
p=2
in all cases except whendim
is a list of three or more dims, in which case Frobenius norm throws an error.Nuclear norm can only be calculated across exactly two dimensions.
dim (int, tuple of ints, list of ints, optional) – Specifies which dimension or dimensions of
input
to calculate the norm across. Ifdim
isNone
, the norm will be calculated across all dimensions ofinput
. If the norm type indicated byp
does not support the specified number of dimensions, an error will occur.keepdim (bool, optional) – whether the output tensors have
dim
retained or not. Ignored ifdim
=None
andout
=None
. Default:False
dtype (
oneflow.dtype
, optional) – the desired data type of returned tensor. If specified, the input tensor is casted todtype
while performing the operation. Default: None.
Note
Even though
p='fro'
supports any number of dimensions, the true mathematical definition of Frobenius norm only applies to tensors with exactly two dimensions.oneflow.linalg.norm()
withord='fro'
aligns with the mathematical definition, since it can only be applied across exactly two dimensions.Example:
>>> import oneflow as flow >>> a = flow.arange(9, dtype= flow.float) - 4 >>> b = a.reshape((3, 3)) >>> flow.norm(a) tensor(7.7460, dtype=oneflow.float32) >>> flow.norm(b) tensor(7.7460, dtype=oneflow.float32) >>> flow.norm(a, float('inf')) tensor(4., dtype=oneflow.float32) >>> flow.norm(b, float('inf')) tensor(9., dtype=oneflow.float32) >>> c = flow.tensor([[ 1, 2, 3],[-1, 1, 4]] , dtype= flow.float) >>> flow.norm(c, dim=0) tensor([1.4142, 2.2361, 5.0000], dtype=oneflow.float32) >>> flow.norm(c, dim=1) tensor([3.7417, 4.2426], dtype=oneflow.float32) >>> flow.norm(c, p=1, dim=1) tensor([6., 6.], dtype=oneflow.float32) >>> d = flow.arange(8, dtype= flow.float).reshape(2,2,2) >>> flow.norm(d, dim=(1,2)) tensor([ 3.7417, 11.2250], dtype=oneflow.float32) >>> flow.norm(d[0, :, :]), flow.norm(d[1, :, :]) (tensor(3.7417, dtype=oneflow.float32), tensor(11.2250, dtype=oneflow.float32))