| 130 | REGISTER_GRADIENT_OP("Exp", ExpGrad); |
| 131 | |
| 132 | Status Expm1Grad(const Scope& scope, const Operation& op, |
| 133 | const std::vector<Output>& grad_inputs, |
| 134 | std::vector<Output>* grad_outputs) { |
| 135 | // y = expm1(x) |
| 136 | // dy/dx = exp(x) |
| 137 | auto dydx = Exp(scope, op.input(0)); |
| 138 | // grad(x) = grad(y) * conj(dy/dx) |
| 139 | grad_outputs->push_back( |
| 140 | Mul(scope, grad_inputs[0], ConjugateHelper(scope, dydx))); |
| 141 | return scope.status(); |
| 142 | } |
| 143 | REGISTER_GRADIENT_OP("Expm1", Expm1Grad); |
| 144 | |
| 145 | Status LogGrad(const Scope& scope, const Operation& op, |