| 15 | class ScaleGrad : public OpGrad { |
| 16 | public: |
| 17 | virtual std::vector<Express::VARP> onGrad(Express::EXPRP expr, |
| 18 | const std::vector<Express::VARP>& backwardOutput) override { |
| 19 | auto inputs = expr->inputs(); |
| 20 | std::vector<VARP> res(inputs.size(), nullptr); |
| 21 | auto outputDiff = backwardOutput[0]; |
| 22 | |
| 23 | std::unique_ptr<OpT> forwardOp(expr->get()->UnPack()); |
| 24 | auto param = forwardOp->main.AsScale(); |
| 25 | auto channels = param->channels; |
| 26 | auto scale = param->scaleData; |
| 27 | auto zeros = std::vector<float>(scale.size(), 0.0f); |
| 28 | |
| 29 | res[0] = _Scale(outputDiff, channels, std::move(scale), std::move(zeros)); |
| 30 | |
| 31 | return res; |
| 32 | } |
| 33 | }; |
| 34 | |
| 35 | static void _create() { |