forked from mindspore-Ecosystem/mindspore
Add FloorMod, Acosh in ME
This commit is contained in:
parent
d8b460c780
commit
6f1747045c
|
@ -171,6 +171,8 @@ const char kNameAbsGrad[] = "AbsGrad";
|
||||||
const char kNameBinaryCrossEntropy[] = "BinaryCrossEntropy";
|
const char kNameBinaryCrossEntropy[] = "BinaryCrossEntropy";
|
||||||
const char kNameBinaryCrossEntropyGrad[] = "BinaryCrossEntropyGrad";
|
const char kNameBinaryCrossEntropyGrad[] = "BinaryCrossEntropyGrad";
|
||||||
const char kNameSparseApplyAdagrad[] = "SparseApplyAdagrad";
|
const char kNameSparseApplyAdagrad[] = "SparseApplyAdagrad";
|
||||||
|
const char kNameAcosh[] = "Acosh";
|
||||||
|
const char kNameFloorMod[] = "FloorMod";
|
||||||
const char kNameSpaceToDepth[] = "SpaceToDepth";
|
const char kNameSpaceToDepth[] = "SpaceToDepth";
|
||||||
const char kNameDepthToSpace[] = "DepthToSpace";
|
const char kNameDepthToSpace[] = "DepthToSpace";
|
||||||
const char kNameSign[] = "Sign";
|
const char kNameSign[] = "Sign";
|
||||||
|
@ -360,6 +362,8 @@ std::unordered_map<std::string, OpAdapterDescPtr> &DfGraphConvertor::get_adpt_ma
|
||||||
{string(kNameBinaryCrossEntropy), ADPT_DESC(BinaryCrossEntropy)},
|
{string(kNameBinaryCrossEntropy), ADPT_DESC(BinaryCrossEntropy)},
|
||||||
{string(kNameBinaryCrossEntropyGrad), ADPT_DESC(BinaryCrossEntropyGrad)},
|
{string(kNameBinaryCrossEntropyGrad), ADPT_DESC(BinaryCrossEntropyGrad)},
|
||||||
{string(kNameSparseApplyAdagrad), ADPT_DESC(SparseApplyAdagradD)},
|
{string(kNameSparseApplyAdagrad), ADPT_DESC(SparseApplyAdagradD)},
|
||||||
|
{string(kNameAcosh), ADPT_DESC(Acosh)},
|
||||||
|
{string(kNameFloorMod), ADPT_DESC(FloorMod)},
|
||||||
{string(kNameSpaceToDepth), ADPT_DESC(SpaceToDepth)},
|
{string(kNameSpaceToDepth), ADPT_DESC(SpaceToDepth)},
|
||||||
{string(kNameDepthToSpace), ADPT_DESC(DepthToSpace)},
|
{string(kNameDepthToSpace), ADPT_DESC(DepthToSpace)},
|
||||||
{string(kNameSign), ADPT_DESC(Sign)},
|
{string(kNameSign), ADPT_DESC(Sign)},
|
||||||
|
|
|
@ -357,6 +357,11 @@ INPUT_MAP(AcosGrad) = {{1, INPUT_DESC(y)}, {2, INPUT_DESC(dy)}};
|
||||||
ATTR_MAP(AcosGrad) = EMPTY_ATTR_MAP;
|
ATTR_MAP(AcosGrad) = EMPTY_ATTR_MAP;
|
||||||
OUTPUT_MAP(AcosGrad) = {{0, OUTPUT_DESC(z)}};
|
OUTPUT_MAP(AcosGrad) = {{0, OUTPUT_DESC(z)}};
|
||||||
|
|
||||||
|
// Acosh
|
||||||
|
INPUT_MAP(Acosh) = {{1, INPUT_DESC(x)}};
|
||||||
|
ATTR_MAP(Acosh) = EMPTY_ATTR_MAP;
|
||||||
|
OUTPUT_MAP(Acosh) = {{0, OUTPUT_DESC(y)}};
|
||||||
|
|
||||||
// Floor
|
// Floor
|
||||||
INPUT_MAP(Floor) = {{1, INPUT_DESC(x)}};
|
INPUT_MAP(Floor) = {{1, INPUT_DESC(x)}};
|
||||||
ATTR_MAP(Floor) = EMPTY_ATTR_MAP;
|
ATTR_MAP(Floor) = EMPTY_ATTR_MAP;
|
||||||
|
@ -367,6 +372,11 @@ INPUT_MAP(FloorDiv) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
|
||||||
ATTR_MAP(FloorDiv) = EMPTY_ATTR_MAP;
|
ATTR_MAP(FloorDiv) = EMPTY_ATTR_MAP;
|
||||||
OUTPUT_MAP(FloorDiv) = {{0, OUTPUT_DESC(y)}};
|
OUTPUT_MAP(FloorDiv) = {{0, OUTPUT_DESC(y)}};
|
||||||
|
|
||||||
|
// FloorMod
|
||||||
|
INPUT_MAP(FloorMod) = {{1, INPUT_DESC(x1)}, {2, INPUT_DESC(x2)}};
|
||||||
|
ATTR_MAP(FloorMod) = EMPTY_ATTR_MAP;
|
||||||
|
OUTPUT_MAP(FloorMod) = {{0, OUTPUT_DESC(y)}};
|
||||||
|
|
||||||
// Sin
|
// Sin
|
||||||
INPUT_MAP(Sin) = {{1, INPUT_DESC(x)}};
|
INPUT_MAP(Sin) = {{1, INPUT_DESC(x)}};
|
||||||
ATTR_MAP(Sin) = EMPTY_ATTR_MAP;
|
ATTR_MAP(Sin) = EMPTY_ATTR_MAP;
|
||||||
|
|
|
@ -324,11 +324,15 @@ DECLARE_OP_USE_OUTPUT(Acos)
|
||||||
|
|
||||||
DECLARE_OP_ADAPTER(AcosGrad)
|
DECLARE_OP_ADAPTER(AcosGrad)
|
||||||
DECLARE_OP_USE_OUTPUT(AcosGrad)
|
DECLARE_OP_USE_OUTPUT(AcosGrad)
|
||||||
|
DECLARE_OP_ADAPTER(Acosh)
|
||||||
|
DECLARE_OP_USE_OUTPUT(Acosh)
|
||||||
|
|
||||||
DECLARE_OP_ADAPTER(Floor)
|
DECLARE_OP_ADAPTER(Floor)
|
||||||
DECLARE_OP_USE_OUTPUT(Floor)
|
DECLARE_OP_USE_OUTPUT(Floor)
|
||||||
DECLARE_OP_ADAPTER(FloorDiv)
|
DECLARE_OP_ADAPTER(FloorDiv)
|
||||||
DECLARE_OP_USE_OUTPUT(FloorDiv)
|
DECLARE_OP_USE_OUTPUT(FloorDiv)
|
||||||
|
DECLARE_OP_ADAPTER(FloorMod)
|
||||||
|
DECLARE_OP_USE_OUTPUT(FloorMod)
|
||||||
DECLARE_OP_ADAPTER(Sin)
|
DECLARE_OP_ADAPTER(Sin)
|
||||||
DECLARE_OP_USE_OUTPUT(Sin)
|
DECLARE_OP_USE_OUTPUT(Sin)
|
||||||
DECLARE_OP_ADAPTER(Exp)
|
DECLARE_OP_ADAPTER(Exp)
|
||||||
|
@ -450,7 +454,6 @@ DECLARE_OP_USE_INPUT_ATTR(ApplyRMSPropD)
|
||||||
DECLARE_OP_USE_OUTPUT(ApplyRMSPropD)
|
DECLARE_OP_USE_OUTPUT(ApplyRMSPropD)
|
||||||
DECLARE_OP_ADAPTER(ApplyCenteredRMSProp)
|
DECLARE_OP_ADAPTER(ApplyCenteredRMSProp)
|
||||||
DECLARE_OP_USE_OUTPUT(ApplyCenteredRMSProp)
|
DECLARE_OP_USE_OUTPUT(ApplyCenteredRMSProp)
|
||||||
|
|
||||||
#ifdef ENABLE_GE
|
#ifdef ENABLE_GE
|
||||||
DECLARE_OP_ADAPTER(Print)
|
DECLARE_OP_ADAPTER(Print)
|
||||||
DECLARE_OP_USE_DYN_INPUT(Print)
|
DECLARE_OP_USE_DYN_INPUT(Print)
|
||||||
|
|
|
@ -251,6 +251,20 @@ def get_bprop_floordiv(self):
|
||||||
return bprop
|
return bprop
|
||||||
|
|
||||||
|
|
||||||
|
@bprop_getters.register(P.FloorMod)
|
||||||
|
def get_bprop_floormod(self):
|
||||||
|
"""Grad definition for `FloorMod` operation."""
|
||||||
|
div_op = P.FloorMod()
|
||||||
|
neg = P.Neg()
|
||||||
|
mul_op = P.Mul()
|
||||||
|
|
||||||
|
def bprop(x, y, out, dout):
|
||||||
|
bc_x = div_op(dout, y)
|
||||||
|
bc_y = neg(mul_op(bc_x, out))
|
||||||
|
return binop_grad_common(x, y, bc_x, bc_y)
|
||||||
|
return bprop
|
||||||
|
|
||||||
|
|
||||||
@bprop_getters.register(P.Square)
|
@bprop_getters.register(P.Square)
|
||||||
def get_bprop_square(self):
|
def get_bprop_square(self):
|
||||||
"""Grad definition for `Square` operation."""
|
"""Grad definition for `Square` operation."""
|
||||||
|
@ -690,6 +704,17 @@ def get_bprop_acos(self):
|
||||||
return bprop
|
return bprop
|
||||||
|
|
||||||
|
|
||||||
|
@bprop_getters.register(P.Acosh)
|
||||||
|
def get_bprop_acosh(self):
|
||||||
|
"""Grad definition for `Acosh` operation."""
|
||||||
|
input_grad = G.AcoshGrad()
|
||||||
|
|
||||||
|
def bprop(x, out, dout):
|
||||||
|
dx = input_grad(x, dout)
|
||||||
|
return (dx,)
|
||||||
|
return bprop
|
||||||
|
|
||||||
|
|
||||||
@bprop_getters.register(P.Abs)
|
@bprop_getters.register(P.Abs)
|
||||||
def get_bprop_abs(self):
|
def get_bprop_abs(self):
|
||||||
"""Grad definition for `Abs` operation."""
|
"""Grad definition for `Abs` operation."""
|
||||||
|
|
|
@ -39,7 +39,7 @@ from .control_ops import ControlDepend, GeSwitch, Merge
|
||||||
from .inner_ops import ScalarCast
|
from .inner_ops import ScalarCast
|
||||||
from .math_ops import (Abs, ACos, AddN, AssignAdd, AssignSub, Atan2, BatchMatMul,
|
from .math_ops import (Abs, ACos, AddN, AssignAdd, AssignSub, Atan2, BatchMatMul,
|
||||||
ReduceMax, ReduceMin, ReduceMean, ReduceSum, ReduceAll, ReduceProd, CumProd,
|
ReduceMax, ReduceMin, ReduceMean, ReduceSum, ReduceAll, ReduceProd, CumProd,
|
||||||
Cos, Div, Equal, EqualCount, Exp, Floor, FloorDiv,
|
Cos, Div, Equal, EqualCount, Exp, Floor, FloorDiv, FloorMod, Acosh,
|
||||||
Greater, GreaterEqual, Less, LessEqual, Log, LogicalAnd,
|
Greater, GreaterEqual, Less, LessEqual, Log, LogicalAnd,
|
||||||
LogicalNot, LogicalOr, MatMul, Maximum,
|
LogicalNot, LogicalOr, MatMul, Maximum,
|
||||||
Minimum, Mul, Neg, NMSWithMask, NotEqual,
|
Minimum, Mul, Neg, NMSWithMask, NotEqual,
|
||||||
|
@ -205,6 +205,8 @@ __all__ = [
|
||||||
'Log',
|
'Log',
|
||||||
'SigmoidCrossEntropyWithLogits',
|
'SigmoidCrossEntropyWithLogits',
|
||||||
'FloorDiv',
|
'FloorDiv',
|
||||||
|
'FloorMod',
|
||||||
|
'Acosh',
|
||||||
"PReLU",
|
"PReLU",
|
||||||
"Cos",
|
"Cos",
|
||||||
"ACos",
|
"ACos",
|
||||||
|
|
|
@ -1183,6 +1183,62 @@ class Floor(PrimitiveWithInfer):
|
||||||
return x_dtype
|
return x_dtype
|
||||||
|
|
||||||
|
|
||||||
|
class FloorMod(_MathBinaryOp):
|
||||||
|
"""
|
||||||
|
Compute element-wise remainder of division.
|
||||||
|
|
||||||
|
The inputs must be two tensors or one tensor and one scalar.
|
||||||
|
When the inputs are two tensors, the shapes of them could be broadcast,
|
||||||
|
and the data types of them should be same.
|
||||||
|
When the inputs are one tensor and one scalar, the scalar cannot be a parameter, only can be a constant,
|
||||||
|
and the type of the scalar is the same as the data type of the tensor.
|
||||||
|
|
||||||
|
Inputs:
|
||||||
|
- **input_x** (Union[Tensor, Number]) - The first input is a tensor whose data type is number or a number.
|
||||||
|
- **input_y** (Union[Tensor, Number]) - The second input is a tensor whose data type is same as 'input_x' or
|
||||||
|
a number.
|
||||||
|
|
||||||
|
Outputs:
|
||||||
|
Tensor, the shape is same as the shape after broadcasting, and the data type is same as 'input_x'.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
>>> input_x = Tensor(np.array([2, 4, -1]), mindspore.int32)
|
||||||
|
>>> input_y = Tensor(np.array([3, 3, 3]), mindspore.int32)
|
||||||
|
>>> floor_mod = FloorMod()
|
||||||
|
>>> floor_mod(input_x, input_y)
|
||||||
|
[2, 1, 2]
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Acosh(PrimitiveWithInfer):
|
||||||
|
"""
|
||||||
|
Compute inverse hyperbolic cosine of x element-wise.
|
||||||
|
|
||||||
|
Inputs:
|
||||||
|
- **input_x** (Tensor) - The shape of tensor is :math:`(x_1, x_2, ..., x_R)`.
|
||||||
|
|
||||||
|
Outputs:
|
||||||
|
Tensor, has the same shape as `input_x`.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
>>> acosh = Acosh()
|
||||||
|
>>> X = Tensor(np.array([1.0, 1.5, 3.0, 100.0]), ms.float32)
|
||||||
|
>>> output = acosh(X)
|
||||||
|
"""
|
||||||
|
|
||||||
|
@prim_attr_register
|
||||||
|
def __init__(self):
|
||||||
|
"""init Acosh"""
|
||||||
|
|
||||||
|
def infer_shape(self, x):
|
||||||
|
return x
|
||||||
|
|
||||||
|
def infer_dtype(self, x):
|
||||||
|
validator.check_subclass("x_dtype", x, mstype.tensor)
|
||||||
|
validator.check_typename('x_dtype', x, mstype.number_type)
|
||||||
|
return x
|
||||||
|
|
||||||
|
|
||||||
class _LogicBinaryOp(_BinaryOp):
|
class _LogicBinaryOp(_BinaryOp):
|
||||||
"""
|
"""
|
||||||
Define logic binary operators.
|
Define logic binary operators.
|
||||||
|
|
|
@ -2395,4 +2395,4 @@ class ApplyFtrl(PrimitiveWithInfer):
|
||||||
validator.check_typename("l1", l1_type,[mstype.float16, mstype.float32])
|
validator.check_typename("l1", l1_type,[mstype.float16, mstype.float32])
|
||||||
validator.check_typename("l2", l2_type,[mstype.float16, mstype.float32])
|
validator.check_typename("l2", l2_type,[mstype.float16, mstype.float32])
|
||||||
validator.check_typename("lr_power", lr_power_type,[mstype.float16, mstype.float32])
|
validator.check_typename("lr_power", lr_power_type,[mstype.float16, mstype.float32])
|
||||||
return var_type
|
return var_type
|
||||||
|
|
|
@ -219,6 +219,10 @@ test_case_math_ops = [
|
||||||
'block': P.ACos(),
|
'block': P.ACos(),
|
||||||
'desc_inputs': [[2, 3]],
|
'desc_inputs': [[2, 3]],
|
||||||
'desc_bprop': [[2, 3]]}),
|
'desc_bprop': [[2, 3]]}),
|
||||||
|
('Acosh', {
|
||||||
|
'block': P.Acosh(),
|
||||||
|
'desc_inputs': [Tensor(np.random.rand(4).astype(np.float16))],
|
||||||
|
'skip': ['backward']}),
|
||||||
('Sin', {
|
('Sin', {
|
||||||
'block': P.Sin(),
|
'block': P.Sin(),
|
||||||
'desc_inputs': [[2, 3]],
|
'desc_inputs': [[2, 3]],
|
||||||
|
@ -301,6 +305,11 @@ test_case_math_ops = [
|
||||||
'desc_inputs': [Tensor(np.random.rand(4).astype(np.float16)),
|
'desc_inputs': [Tensor(np.random.rand(4).astype(np.float16)),
|
||||||
Tensor(np.random.rand(4).astype(np.float16))],
|
Tensor(np.random.rand(4).astype(np.float16))],
|
||||||
'skip': ['backward']}),
|
'skip': ['backward']}),
|
||||||
|
('FloorMod', {
|
||||||
|
'block': P.FloorMod(),
|
||||||
|
'desc_inputs': [Tensor(np.random.rand(4).astype(np.float16)),
|
||||||
|
Tensor(np.random.rand(4).astype(np.float16))],
|
||||||
|
'skip': ['backward']}),
|
||||||
('identity', {
|
('identity', {
|
||||||
'block': ops.functional.identity,
|
'block': ops.functional.identity,
|
||||||
'desc_inputs': [[2, 2]],
|
'desc_inputs': [[2, 2]],
|
||||||
|
|
Loading…
Reference in New Issue