# Copyright 2020-2021 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. # ============================================================================ """Generate bprop for other ops""" from .. import operations as P from ..operations import _grad_ops as G from ..operations import _inner_ops as inner from ..composite.multitype_ops.zeros_like_impl import zeros_like from .grad_base import bprop_getters # Unused parameters are placeholders. @bprop_getters.register(P.Assign) def get_bprop_assign(self): """Generate bprop for Assign""" def bprop(x, y, out, dout): return (dout, zeros_like(y)) return bprop @bprop_getters.register(P.InvertPermutation) def get_bprop_invert_permutation(self): """Generate bprop for InvertPermutation""" def bprop(x, out, dout): return (zeros_like(x),) return bprop @bprop_getters.register(P.IOU) def get_bprop_iou(self): """Generate bprop for IOU""" def bprop(x, y, out, dout): return zeros_like(x), zeros_like(y) return bprop @bprop_getters.register(inner.SyncBatchNorm) def get_bprop_sync_batch_norm(self): """Grad definition for `SyncBatchNorm` operation.""" input_grad = G.SyncBatchNormGrad(self.epsilon, self.group, self.device_num) def bprop(x, scale, b, mean, variance, out, dout): saved_mean = out[3] saved_variance = out[4] out = input_grad(dout[0], x, scale, saved_mean, saved_variance) dx = out[0] dscale = out[1] dbias = out[2] return dx, dscale, dbias, zeros_like(mean), zeros_like(variance) return bprop @bprop_getters.register(inner.GpuConvertToDynamicShape) def get_bprop_gpu_convert_to_dynamic_shape(self): """Get backprop for GpuConvertToDynamicShape.""" def bprop(x, out, dout): return (dout,) return bprop