|
|
|
@@ -48,10 +48,10 @@ class ReduceLogSumExp(Cell): |
|
|
|
Default : False. |
|
|
|
|
|
|
|
Inputs: |
|
|
|
- **input_x** (Tensor) - The input tensor. With float16 or float32 data type. |
|
|
|
- **x** (Tensor) - The input tensor. With float16 or float32 data type. |
|
|
|
|
|
|
|
Outputs: |
|
|
|
Tensor, has the same dtype as the `input_x`. |
|
|
|
Tensor, has the same dtype as the `x`. |
|
|
|
|
|
|
|
- If axis is (), and keep_dims is False, |
|
|
|
the output is a 0-D tensor representing the sum of all elements in the input tensor. |
|
|
|
@@ -80,8 +80,8 @@ class ReduceLogSumExp(Cell): |
|
|
|
self.sum = P.ReduceSum(keep_dims) |
|
|
|
self.log = P.Log() |
|
|
|
|
|
|
|
def construct(self, input_x): |
|
|
|
exp = self.exp(input_x) |
|
|
|
def construct(self, x): |
|
|
|
exp = self.exp(x) |
|
|
|
sumexp = self.sum(exp, self.axis) |
|
|
|
logsumexp = self.log(sumexp) |
|
|
|
return logsumexp |
|
|
|
@@ -231,10 +231,10 @@ class LGamma(Cell): |
|
|
|
``Ascend`` ``GPU`` |
|
|
|
|
|
|
|
Inputs: |
|
|
|
- **input_x** (Tensor) - The input tensor. Only float16, float32 are supported. |
|
|
|
- **x** (Tensor) - The input tensor. Only float16, float32 are supported. |
|
|
|
|
|
|
|
Outputs: |
|
|
|
Tensor, has the same shape and dtype as the `input_x`. |
|
|
|
Tensor, has the same shape and dtype as the `x`. |
|
|
|
|
|
|
|
Supported Platforms: |
|
|
|
``Ascend`` |
|
|
|
@@ -287,14 +287,14 @@ class LGamma(Cell): |
|
|
|
self.sin = P.Sin() |
|
|
|
self.isfinite = P.IsFinite() |
|
|
|
|
|
|
|
def construct(self, input_x): |
|
|
|
input_dtype = self.dtype(input_x) |
|
|
|
def construct(self, x): |
|
|
|
input_dtype = self.dtype(x) |
|
|
|
_check_input_dtype("input", input_dtype, [mstype.float16, mstype.float32], self.cls_name) |
|
|
|
infinity = self.fill(input_dtype, self.shape(input_x), self.inf) |
|
|
|
infinity = self.fill(input_dtype, self.shape(x), self.inf) |
|
|
|
|
|
|
|
need_to_reflect = self.less(input_x, 0.5) |
|
|
|
neg_input = -input_x |
|
|
|
z = self.select(need_to_reflect, neg_input, input_x - 1) |
|
|
|
need_to_reflect = self.less(x, 0.5) |
|
|
|
neg_input = -x |
|
|
|
z = self.select(need_to_reflect, neg_input, x - 1) |
|
|
|
|
|
|
|
@constexpr |
|
|
|
def _calculate_x(z, k_base_lanczos_coeff, k_lanczos_coefficients): |
|
|
|
@@ -310,12 +310,9 @@ class LGamma(Cell): |
|
|
|
|
|
|
|
log_y = self.log(x) + (z + self.one_half - t / log_t) * log_t + self.log_sqrt_two_pi |
|
|
|
|
|
|
|
abs_input = self.abs(input_x) |
|
|
|
abs_input = self.abs(x) |
|
|
|
abs_frac_input = abs_input - self.floor(abs_input) |
|
|
|
input_x = self.select(self.lessequal(input_x, 0.0), |
|
|
|
self.select(self.equal(abs_frac_input, 0.0), |
|
|
|
infinity, input_x), |
|
|
|
input_x) |
|
|
|
x = self.select(self.lessequal(x, 0.0), self.select(self.equal(abs_frac_input, 0.0), infinity, x), x) |
|
|
|
reduced_frac_input = self.select(self.greater(abs_frac_input, 0.5), |
|
|
|
1 - abs_frac_input, abs_frac_input) |
|
|
|
reflection_denom = self.log(self.sin(self.pi * reduced_frac_input)) |
|
|
|
@@ -326,7 +323,7 @@ class LGamma(Cell): |
|
|
|
|
|
|
|
result = self.select(need_to_reflect, reflection, log_y) |
|
|
|
|
|
|
|
return self.select(self.isfinite(input_x), result, infinity) |
|
|
|
return self.select(self.isfinite(x), result, infinity) |
|
|
|
|
|
|
|
|
|
|
|
class DiGamma(Cell): |
|
|
|
@@ -353,10 +350,10 @@ class DiGamma(Cell): |
|
|
|
``Ascend`` ``GPU`` |
|
|
|
|
|
|
|
Inputs: |
|
|
|
- **input_x** (Tensor[Number]) - The input tensor. Only float16, float32 are supported. |
|
|
|
- **x** (Tensor[Number]) - The input tensor. Only float16, float32 are supported. |
|
|
|
|
|
|
|
Outputs: |
|
|
|
Tensor, has the same shape and dtype as the `input_x`. |
|
|
|
Tensor, has the same shape and dtype as the `x`. |
|
|
|
|
|
|
|
Examples: |
|
|
|
>>> input_x = Tensor(np.array([2, 3, 4]).astype(np.float32)) |
|
|
|
@@ -397,12 +394,12 @@ class DiGamma(Cell): |
|
|
|
self.cos = P.Cos() |
|
|
|
self.logicaland = P.LogicalAnd() |
|
|
|
|
|
|
|
def construct(self, input_x): |
|
|
|
input_dtype = self.dtype(input_x) |
|
|
|
_check_input_dtype("input x", input_dtype, [mstype.float16, mstype.float32], self.cls_name) |
|
|
|
need_to_reflect = self.less(input_x, 0.5) |
|
|
|
neg_input = -input_x |
|
|
|
z = self.select(need_to_reflect, neg_input, input_x - 1) |
|
|
|
def construct(self, x): |
|
|
|
input_dtype = self.dtype(x) |
|
|
|
_check_input_dtype("input_x", input_dtype, [mstype.float16, mstype.float32], self.cls_name) |
|
|
|
need_to_reflect = self.less(x, 0.5) |
|
|
|
neg_input = -x |
|
|
|
z = self.select(need_to_reflect, neg_input, x - 1) |
|
|
|
|
|
|
|
@constexpr |
|
|
|
def _calculate_num_denom(z, k_base_lanczos_coeff, k_lanczos_coefficients): |
|
|
|
@@ -419,12 +416,12 @@ class DiGamma(Cell): |
|
|
|
|
|
|
|
y = log_t + num / denom - self.k_lanczos_gamma / t |
|
|
|
|
|
|
|
reduced_input = input_x + self.abs(self.floor(input_x + 0.5)) |
|
|
|
reduced_input = x + self.abs(self.floor(x + 0.5)) |
|
|
|
reflection = y - self.pi * self.cos(self.pi * reduced_input) / self.sin(self.pi * reduced_input) |
|
|
|
real_result = self.select(need_to_reflect, reflection, y) |
|
|
|
nan = self.fill(self.dtype(input_x), self.shape(input_x), np.nan) |
|
|
|
nan = self.fill(self.dtype(x), self.shape(x), np.nan) |
|
|
|
|
|
|
|
return self.select(self.logicaland(self.less(input_x, 0), self.equal(input_x, self.floor(input_x))), |
|
|
|
return self.select(self.logicaland(self.less(x, 0), self.equal(x, self.floor(x))), |
|
|
|
nan, real_result) |
|
|
|
|
|
|
|
|
|
|
|
|