|
|
|
@ -25,7 +25,18 @@ from ...common import dtype as mstype
|
|
|
|
|
from ..._checkparam import Validator as validator
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
__all__ = ['ReduceLogSumExp', 'Range', 'LinSpace', 'LGamma', 'DiGamma', 'IGamma', 'LBeta', 'MatMul', 'Moments']
|
|
|
|
|
__all__ = ['ReduceLogSumExp',
|
|
|
|
|
'Range',
|
|
|
|
|
'LinSpace',
|
|
|
|
|
'LGamma',
|
|
|
|
|
'DiGamma',
|
|
|
|
|
'IGamma',
|
|
|
|
|
'LBeta',
|
|
|
|
|
'MatMul',
|
|
|
|
|
'Moments',
|
|
|
|
|
'MatInverse',
|
|
|
|
|
'MatDet',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@constexpr
|
|
|
|
@ -996,3 +1007,77 @@ class Moments(Cell):
|
|
|
|
|
variance = self.cast(variance, mstype.float16)
|
|
|
|
|
return mean, variance
|
|
|
|
|
return mean, variance
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MatInverse(Cell):
|
|
|
|
|
"""
|
|
|
|
|
Calculate the inverse of Positive-Definite Hermitian matrix using Cholesky decomposition.
|
|
|
|
|
|
|
|
|
|
Supported Platforms:
|
|
|
|
|
``GPU``
|
|
|
|
|
|
|
|
|
|
Inputs:
|
|
|
|
|
- **a** (Tensor[Number]) - The input tensor. It must be a positive-definite matrix.
|
|
|
|
|
With float16 or float32 data type.
|
|
|
|
|
|
|
|
|
|
Outputs:
|
|
|
|
|
Tensor, has the same dtype as the `a`.
|
|
|
|
|
|
|
|
|
|
Examples:
|
|
|
|
|
>>> input_a = Tensor(np.array([[4, 12, -16], [12, 37, -43], [-16, -43, 98]]).astype(np.float32))
|
|
|
|
|
>>> op = nn.MatInverse()
|
|
|
|
|
>>> output = op(input_a)
|
|
|
|
|
>>> print(output)
|
|
|
|
|
[[49.36112 -13.555558 2.1111116]
|
|
|
|
|
[-13.555558 3.7777784 -0.5555557]
|
|
|
|
|
[2.1111116 -0.5555557 0.11111111]]
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self):
|
|
|
|
|
super(MatInverse, self).__init__()
|
|
|
|
|
self.dtype = P.DType()
|
|
|
|
|
self.choleskytrsm = P.CholeskyTrsm()
|
|
|
|
|
self.matmul = MatMul(transpose_x1=True)
|
|
|
|
|
|
|
|
|
|
def construct(self, a):
|
|
|
|
|
input_dtype = self.dtype(a)
|
|
|
|
|
_check_input_dtype("input_a", input_dtype, [mstype.float16, mstype.float32], self.cls_name)
|
|
|
|
|
l_inverse = self.choleskytrsm(a)
|
|
|
|
|
a_inverse = self.matmul(l_inverse, l_inverse)
|
|
|
|
|
return a_inverse
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MatDet(Cell):
|
|
|
|
|
"""
|
|
|
|
|
Calculate the determinant of Positive-Definite Hermitian matrix using Cholesky decomposition.
|
|
|
|
|
|
|
|
|
|
Supported Platforms:
|
|
|
|
|
``GPU``
|
|
|
|
|
|
|
|
|
|
Inputs:
|
|
|
|
|
- **a** (Tensor[Number]) - The input tensor. It must be a positive-definite matrix.
|
|
|
|
|
With float16 or float32 data type.
|
|
|
|
|
|
|
|
|
|
Outputs:
|
|
|
|
|
Tensor, has the same dtype as the `a`.
|
|
|
|
|
|
|
|
|
|
Examples:
|
|
|
|
|
>>> input_a = Tensor(np.array([[4, 12, -16], [12, 37, -43], [-16, -43, 98]]).astype(np.float32))
|
|
|
|
|
>>> op = nn.MatDet()
|
|
|
|
|
>>> output = op(input_a)
|
|
|
|
|
>>> print(output)
|
|
|
|
|
35.999996
|
|
|
|
|
"""
|
|
|
|
|
def __init__(self):
|
|
|
|
|
super(MatDet, self).__init__()
|
|
|
|
|
self.dtype = P.DType()
|
|
|
|
|
self.cholesky = P.Cholesky()
|
|
|
|
|
self.det_triangle = P.DetTriangle()
|
|
|
|
|
self.square = P.Square()
|
|
|
|
|
|
|
|
|
|
def construct(self, a):
|
|
|
|
|
input_dtype = self.dtype(a)
|
|
|
|
|
_check_input_dtype("input_a", input_dtype, [mstype.float16, mstype.float32], self.cls_name)
|
|
|
|
|
l = self.cholesky(a)
|
|
|
|
|
l_det = self.det_triangle(l)
|
|
|
|
|
a_det = self.square(l_det)
|
|
|
|
|
return a_det
|
|
|
|
|