Differences with torch.svd
The following mapping relationships can be found in this file.
PyTorch APIs |
MindSpore APIs |
|---|---|
torch.svd |
mindspore.ops.svd |
torch.Tensor.svd |
mindspore.Tensor.svd |
torch.svd
torch.svd(input, some=True, compute_uv=True, *, out=None)
For more information, see torch.svd.
mindspore.ops.svd
mindspore.ops.svd(input, full_matrices=False, compute_uv=True)
For more information, see mindspore.ops.svd.
Differences
API function of MindSpore is not consistent with that of PyTorch.
PyTorch:
If
someis True, the method returns the reduced singular value decomposition.There are always three output values, and the order of the output values is u, s, v.
If
compute_uvis False, the returned u and v will be zero-filled matrices.
MindSpore:
If
full_matricesis False, the method returns the reduced singular value decomposition.If
compute_uvis False, there is only one output value s.If
compute_uvis True, there are three output values in the order s, u, v.
torch.svd()has been deprecated in PyTorch 1.8.0 and later, and alternative apitorch.linalg.svd()is recommended, which has the same parameterfull_matricesasmindspore.ops.svd.
Categories |
Subcategories |
PyTorch |
MindSpore |
Differences |
|---|---|---|---|---|
Parameters |
Parameter 1 |
input |
input |
Consistent |
Parameter 2 |
some |
full_matrices |
To return the reduced singular value decomposition, MindSpore should set |
|
Parameter 3 |
compute_uv |
compute_uv |
If |
|
Parameter 4 |
out |
- |
For details, see General Difference Parameter Table |
Code Example 1
When
compute_uvis False, PyTorch has three output values.
# PyTorch
import torch
input = torch.tensor([[1, 2], [-4, -5], [2, 1]], dtype=torch.float32)
u, s, v = torch.svd(input, some=False, compute_uv=False)
print(s)
print(u)
print(v)
# tensor([7.0653, 1.0401])
# tensor([[0., 0., 0.],
# [0., 0., 0.],
# [0., 0., 0.]])
# tensor([[0., 0.],
# [0., 0.]])
# MindSpore doesn't support this feature currently.
Code Example 2
When
compute_uvis True, the order of output values is inconsistent. The output values of singular value decomposition are not unique.
# PyTorch
import torch
input = torch.tensor([[1, 2], [-4, -5], [2, 1]], dtype=torch.float32)
u, s, v = torch.svd(input, some=False, compute_uv=True)
print(s)
print(u)
print(v)
# tensor([7.0653, 1.0401])
# tensor([[-0.3082, -0.4882, 0.8165],
# [ 0.9061, 0.1107, 0.4082],
# [-0.2897, 0.8657, 0.4082]])
# tensor([[-0.6386, 0.7695],
# [-0.7695, -0.6386]])
# MindSpore
import mindspore as ms
input = ms.Tensor([[1, 2], [-4, -5], [2, 1]], ms.float32)
s, u, v = ms.ops.svd(input, full_matrices=True, compute_uv=True)
print(s)
print(u)
print(v)
# [7.0652843 1.040081 ]
# [[ 0.30821905 -0.48819482 0.81649697]
# [-0.90613353 0.11070572 0.40824813]
# [ 0.2896955 0.8656849 0.4082479 ]]
# [[ 0.63863593 0.769509 ]
# [ 0.769509 -0.63863593]]
