|  | #include "caffe2/operators/scale_op.h" | 
|  |  | 
|  | namespace caffe2 { | 
|  |  | 
|  | REGISTER_CPU_OPERATOR(Scale, ScaleOp<CPUContext>); | 
|  | OPERATOR_SCHEMA(Scale) | 
|  | .NumInputs(1) | 
|  | .NumOutputs(1) | 
|  | .AllowInplace({{0, 0}}) | 
|  | .IdenticalTypeAndShape() | 
|  | .SetDoc(R"DOC( | 
|  | Scale takes one input data (Tensor) and produces one output data | 
|  | (Tensor) whose value is the input data tensor scaled element-wise. | 
|  | )DOC") | 
|  | .Arg("scale", "(float, default 1.0) the scale to apply."); | 
|  |  | 
|  | class GetScaleGradient : public GradientMakerBase { | 
|  | using GradientMakerBase::GradientMakerBase; | 
|  | vector<OperatorDef> GetGradientDefs() override { | 
|  | // CopyArguments is true by default so the "scale" arg is going to be copied | 
|  | return SingleGradientDef( | 
|  | "Scale", "", vector<string>{GO(0)}, vector<string>{GI(0)}); | 
|  | } | 
|  | }; | 
|  | REGISTER_GRADIENT(Scale, GetScaleGradient); | 
|  | }  // namespace caffe2 |