diff --git a/mindspore/ops/_grad/grad_nn_ops.py b/mindspore/ops/_grad/grad_nn_ops.py index c692d94559..508883f221 100755 --- a/mindspore/ops/_grad/grad_nn_ops.py +++ b/mindspore/ops/_grad/grad_nn_ops.py @@ -624,7 +624,7 @@ def get_bprop_mirror_pad(self): mirror_pad_grad = G.MirrorPadGrad(self.mode) def bprop(x, paddings, out, dout): - dx = mirror_pad_grad(dout, paddings, x) + dx = mirror_pad_grad(dout, paddings) return (dx, zeros_like(paddings)) return bprop diff --git a/mindspore/ops/_op_impl/aicpu/__init__.py b/mindspore/ops/_op_impl/aicpu/__init__.py index 1f2e05284f..adff8bebfc 100644 --- a/mindspore/ops/_op_impl/aicpu/__init__.py +++ b/mindspore/ops/_op_impl/aicpu/__init__.py @@ -33,6 +33,7 @@ from .rnnt_loss import _rnnt_loss_aicpu from .random_categorical import _random_categorical_aicpu from .cast import _cast_aicpu from .mirror_pad import _mirror_pad_aicpu +from .mirror_pad_grad import _mirror_pad_grad_aicpu from .normal import _normal_aicpu from .gamma import _gamma_aicpu from .poisson import _poisson_aicpu diff --git a/mindspore/ops/_op_impl/aicpu/mirror_pad_grad.py b/mindspore/ops/_op_impl/aicpu/mirror_pad_grad.py new file mode 100644 index 0000000000..f8b38d155b --- /dev/null +++ b/mindspore/ops/_op_impl/aicpu/mirror_pad_grad.py @@ -0,0 +1,52 @@ +# Copyright 2020 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================ + +"""MirrorPadGrad op""" +from mindspore.ops.op_info_register import op_info_register, AiCPURegOp, DataType +mirror_pad_grad_op_info = AiCPURegOp("MirrorPadGrad") \ + .fusion_type("OPAQUE") \ + .input(0, "x", "required") \ + .input(1, "paddings", "required") \ + .output(0, "y", "required") \ + .attr("mode", "str") \ + .dtype_format(DataType.I8_Default, DataType.I32_Default, DataType.I8_Default) \ + .dtype_format(DataType.I16_Default, DataType.I32_Default, DataType.I16_Default) \ + .dtype_format(DataType.I32_Default, DataType.I32_Default, DataType.I32_Default) \ + .dtype_format(DataType.I64_Default, DataType.I32_Default, DataType.I64_Default) \ + .dtype_format(DataType.U8_Default, DataType.I32_Default, DataType.U8_Default) \ + .dtype_format(DataType.U16_Default, DataType.I32_Default, DataType.U16_Default) \ + .dtype_format(DataType.U32_Default, DataType.I32_Default, DataType.U32_Default) \ + .dtype_format(DataType.U64_Default, DataType.I32_Default, DataType.U64_Default) \ + .dtype_format(DataType.F16_Default, DataType.I32_Default, DataType.F16_Default) \ + .dtype_format(DataType.F32_Default, DataType.I32_Default, DataType.F32_Default) \ + .dtype_format(DataType.F64_Default, DataType.I32_Default, DataType.F64_Default) \ + .dtype_format(DataType.I8_Default, DataType.I64_Default, DataType.I8_Default) \ + .dtype_format(DataType.I16_Default, DataType.I64_Default, DataType.I16_Default) \ + .dtype_format(DataType.I32_Default, DataType.I64_Default, DataType.I32_Default) \ + .dtype_format(DataType.I64_Default, DataType.I64_Default, DataType.I64_Default) \ + .dtype_format(DataType.U8_Default, DataType.I64_Default, DataType.U8_Default) \ + .dtype_format(DataType.U16_Default, DataType.I64_Default, DataType.U16_Default) \ + .dtype_format(DataType.U32_Default, DataType.I64_Default, DataType.U32_Default) \ + .dtype_format(DataType.U64_Default, DataType.I64_Default, DataType.U64_Default) \ + .dtype_format(DataType.F16_Default, DataType.I64_Default, DataType.F16_Default) \ + .dtype_format(DataType.F32_Default, DataType.I64_Default, DataType.F32_Default) \ + .dtype_format(DataType.F64_Default, DataType.I64_Default, DataType.F64_Default) \ + .get_op_info() + + +@op_info_register(mirror_pad_grad_op_info) +def _mirror_pad_grad_aicpu(): + """MirrorPadGrad AiCPU register""" + return diff --git a/mindspore/ops/operations/_grad_ops.py b/mindspore/ops/operations/_grad_ops.py index c3f97b9f33..590f277942 100644 --- a/mindspore/ops/operations/_grad_ops.py +++ b/mindspore/ops/operations/_grad_ops.py @@ -1152,11 +1152,10 @@ class MirrorPadGrad(PrimitiveWithInfer): validator.check_string('mode', mode, ['REFLECT', 'SYMMETRIC'], self.name) self.mode = mode - def __infer__(self, dout, paddings, x): + def __infer__(self, dout, paddings): validator.check_subclass("dout", dout['dtype'], mstype.tensor, self.name) validator.check_subclass("paddings", paddings['dtype'], mstype.tensor, self.name) - validator.check_subclass("input_x", x['dtype'], mstype.tensor, self.name) - return {'shape': x['shape'], + return {'shape': dout['shape'], 'dtype': dout['dtype'], 'value': None}