diff --git a/src/framework/operator.h b/src/framework/operator.h index ae51280f0afc8135836dbe76350ee130944708e8..7a3f020638b775f36d8d716eacb729e0437b949c 100644 --- a/src/framework/operator.h +++ b/src/framework/operator.h @@ -103,7 +103,7 @@ class OperatorWithKernel : public OperatorBase { const VariableNameMap &outputs, const AttributeMap &attrs, std::shared_ptr scope) : OperatorBase(type, inputs, outputs, attrs, scope), - param_(inputs, outputs, attrs, *scope) { + param_(inputs, outputs, attrs, scope.get()) { #ifdef PADDLE_MOBILE_CL kernel_.InitCLHelper(scope->GetCLScpoe()); #endif diff --git a/src/operators/fill_constant_op.h b/src/operators/fill_constant_op.h index c9af1e6f02ef022975fc4434f38856a7a97a4136..3b0acff2ed8aa95c2dd22a8d178952ca4ecf22ca 100644 --- a/src/operators/fill_constant_op.h +++ b/src/operators/fill_constant_op.h @@ -35,7 +35,7 @@ class FillConstantOp : public framework::OperatorBase { std::shared_ptr scope) : framework::OperatorBase(type, inputs, outputs, attrs, scope), - param_(inputs, outputs, attrs, *scope) {} + param_(inputs, outputs, attrs, scope.get()) {} void RunImpl() { auto data_type = static_cast<_PaddleMobile__Framework__Proto__VarType__Type>( diff --git a/src/operators/kernel/arm/conv_add_bn_relu_kernel.cpp b/src/operators/kernel/arm/conv_add_bn_relu_kernel.cpp index 1e67f9cc607a6d51abf31ee95e95bff5b051c781..6489140fdd7d01627c51200f2b839866bd911d69 100644 --- a/src/operators/kernel/arm/conv_add_bn_relu_kernel.cpp +++ b/src/operators/kernel/arm/conv_add_bn_relu_kernel.cpp @@ -41,8 +41,11 @@ bool ConvAddBNReluKernel::Init( inv_std_ptr[i] = 1 / static_cast(pow((variance_ptr[i] + epsilon), 0.5)); } - Tensor *new_scale = new Tensor(); - Tensor *new_bias = new Tensor(); + // Tensor *new_scale = new Tensor(); + // Tensor *new_bias = new Tensor(); + + Tensor *new_scale = param->CreateNewScale(); + Tensor *new_bias = param->CreateNewBiase(); auto new_scale_ptr = new_scale->mutable_data({C}); auto new_bias_ptr = new_bias->mutable_data({C}); for (int i = 0; i < C; i++) { diff --git a/src/operators/kernel/arm/conv_bn_relu_kernel.cpp b/src/operators/kernel/arm/conv_bn_relu_kernel.cpp index 44c7f463f4cc6e24c5de696b0750e683e6b8b09c..b178c7c599c80185ccf3eb201d47fef015a36330 100644 --- a/src/operators/kernel/arm/conv_bn_relu_kernel.cpp +++ b/src/operators/kernel/arm/conv_bn_relu_kernel.cpp @@ -42,8 +42,8 @@ bool ConvBNReluKernel::Init(FusionConvBNReluParam *param) { inv_std_ptr[i] = 1 / static_cast(pow((variance_ptr[i] + epsilon), 0.5)); } - Tensor *new_scale = new Tensor(); - Tensor *new_bias = new Tensor(); + Tensor *new_scale = param->CreateNewScale(); + Tensor *new_bias = param->CreateNewBiase(); auto new_scale_ptr = new_scale->mutable_data({C}); auto new_bias_ptr = new_bias->mutable_data({C}); for (int i = 0; i < C; i++) { diff --git a/src/operators/kernel/detection_kernel.h b/src/operators/kernel/detection_kernel.h index 417c68fff7d0e88d2e1fcc1dc8c1f14aa3a4399b..124bdbb04fa4752f4a6d9d671490a6e7d5468f72 100644 --- a/src/operators/kernel/detection_kernel.h +++ b/src/operators/kernel/detection_kernel.h @@ -27,12 +27,14 @@ class AnchorGeneratorParam : public OpParam { public: AnchorGeneratorParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_ = OpParam::GetVarValue("Input", inputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = + OpParam::GetVarValue("Input", inputs, *scope); output_anchors_ = - OpParam::GetVarValue("Anchors", outputs, scope); - output_variances_ = - OpParam::GetVarValue("Variances", outputs, scope); + OpParam::GetVarValue("Anchors", outputs, *scope); + output_variances_ = OpParam::GetVarValue( + "Variances", outputs, *scope); anchor_sizes_ = OpParam::GetAttr>("anchor_sizes", attrs); aspect_ratios_ = @@ -64,22 +66,23 @@ template class ProposalParam : public OpParam { public: ProposalParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { scores_ = - OpParam::GetVarValue("Scores", inputs, scope); - bbox_deltas_ = - OpParam::GetVarValue("BboxDeltas", inputs, scope); + OpParam::GetVarValue("Scores", inputs, *scope); + bbox_deltas_ = OpParam::GetVarValue("BboxDeltas", + inputs, *scope); im_info_ = - OpParam::GetVarValue("ImInfo", inputs, scope); + OpParam::GetVarValue("ImInfo", inputs, *scope); anchors_ = - OpParam::GetVarValue("Anchors", inputs, scope); + OpParam::GetVarValue("Anchors", inputs, *scope); variances_ = - OpParam::GetVarValue("Variances", inputs, scope); + OpParam::GetVarValue("Variances", inputs, *scope); rpn_rois_ = - OpParam::GetVarValue("RpnRois", outputs, scope); + OpParam::GetVarValue("RpnRois", outputs, *scope); rpn_probs_ = OpParam::GetVarValue("RpnRoiProbs", - outputs, scope); + outputs, *scope); pre_nms_topn_ = OpParam::GetAttr("pre_nms_topN", attrs); post_nms_topn_ = OpParam::GetAttr("post_nms_topN", attrs); @@ -117,11 +120,13 @@ template class PSRoiPoolParam : public OpParam { public: PSRoiPoolParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = OpParam::GetVarValue("X", inputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = OpParam::GetVarValue("X", inputs, *scope); input_rois_ = - OpParam::GetVarValue("ROIs", inputs, scope); - output_ = OpParam::GetVarValue("Out", outputs, scope); + OpParam::GetVarValue("ROIs", inputs, *scope); + output_ = + OpParam::GetVarValue("Out", outputs, *scope); output_channels_ = OpParam::GetAttr("output_channels", attrs); pooled_height_ = OpParam::GetAttr("pooled_height", attrs); @@ -152,11 +157,13 @@ class RoiPerspectiveParam : public OpParam { public: RoiPerspectiveParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_x_ = OpParam::GetVarValue("X", inputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = OpParam::GetVarValue("X", inputs, *scope); input_rois_ = - OpParam::GetVarValue("ROIs", inputs, scope); - output_ = OpParam::GetVarValue("Out", outputs, scope); + OpParam::GetVarValue("ROIs", inputs, *scope); + output_ = + OpParam::GetVarValue("Out", outputs, *scope); spatial_scale_ = OpParam::GetAttr("spatial_scale", attrs); transformed_height_ = OpParam::GetAttr("transformed_height", attrs); diff --git a/src/operators/kernel/while_kernel.h b/src/operators/kernel/while_kernel.h index 72b0f5f7388f10551d91491b605d57de2fd7271e..45b83d79669127ba9d5a65f1de83edf82dde96d8 100644 --- a/src/operators/kernel/while_kernel.h +++ b/src/operators/kernel/while_kernel.h @@ -25,10 +25,13 @@ template class WhileParam : public OpParam { public: WhileParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) - : inputs_(inputs), outputs_(outputs), scope_(scope) { + const AttributeMap &attrs, Scope *scope) + : inputs_(inputs), + outputs_(outputs), + scope_(*scope), + OpParam(inputs, outputs, attrs, scope) { cond_ = - OpParam::GetVarValue("Condition", inputs, scope); + OpParam::GetVarValue("Condition", inputs, *scope); sub_block_ = OpParam::GetAttr("sub_block", attrs); } diff --git a/src/operators/op_param.h b/src/operators/op_param.h index 5683138ef1341a42c69fca33dc892a01e79736e4..130b87b31a9b2a0a209d10971d827ef9b9627fc5 100644 --- a/src/operators/op_param.h +++ b/src/operators/op_param.h @@ -69,6 +69,30 @@ struct DtypeTensorTrait { #endif class OpParam { + public: + OpParam(const VariableNameMap &inputs, const VariableNameMap &outputs, + const AttributeMap &attrs, Scope *scope) { + scope_pointer_ = scope; + inputs_ = inputs; + } + + template + T *CreateNewScale() { + std::string scale_key = Getkey("Scale", inputs_, 0); + auto var = scope_pointer_->Var(scale_key + "_new"); + return var->GetMutable(); + } + + template + T *CreateNewBiase() { + std::string biase_key = Getkey("Bias", inputs_, 0); + auto var = scope_pointer_->Var(biase_key + "_new"); + return var->GetMutable(); + } + + VariableNameMap inputs_; + Scope *scope_pointer_ = nullptr; + protected: template static T *InputH0From(const VariableNameMap &inputs, const Scope &scope) { @@ -359,8 +383,10 @@ class OpParam { } } - static std::string getkey(const string &key, const VariableNameMap &var_map, + static std::string Getkey(const string &key, const VariableNameMap &var_map, int index) { + PADDLE_MOBILE_ENFORCE(var_map.count(key) > index, + "%s is not contained in var_map", key.c_str()) auto var_vec = var_map.at(key); return var_vec[index]; } @@ -414,11 +440,12 @@ class ConvParam : public OpParam { public: ConvParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - filter_ = OpParam::FilterFrom(inputs, scope); - input_ = OpParam::InputFrom(inputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + filter_ = OpParam::FilterFrom(inputs, *scope); + input_ = OpParam::InputFrom(inputs, *scope); if (outputs.count("Output")) { - output_ = OpParam::OutputFrom(outputs, scope); + output_ = OpParam::OutputFrom(outputs, *scope); } strides_ = OpParam::GetAttr>("strides", attrs); paddings_ = OpParam::GetAttr>("paddings", attrs); @@ -500,17 +527,18 @@ template Print &operator<<(Print &printer, const ConvParam &conv_param); template -class ElementwiseAddParam : OpParam { +class ElementwiseAddParam : public OpParam { typedef typename DtypeTensorTrait::gtype GType; typedef typename DtypeTensorTrait::rtype RType; public: ElementwiseAddParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_y_ = InputYFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_y_ = InputYFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); axis_ = GetAttr("axis", attrs); } @@ -540,17 +568,18 @@ class ElementwiseAddParam : OpParam { #ifdef ELEMENTWISEMUL_OP template -class ElementwiseMulParam : OpParam { +class ElementwiseMulParam : public OpParam { typedef typename DtypeTensorTrait::gtype GType; typedef typename DtypeTensorTrait::rtype RType; public: ElementwiseMulParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_y_ = InputYFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_y_ = InputYFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); axis_ = GetAttr("axis", attrs); } @@ -577,17 +606,18 @@ using ElementwiseAddReluParam = ElementwiseAddParam; #ifdef ELEMENTWISESUB_OP template -class ElementwiseSubParam : OpParam { +class ElementwiseSubParam : public OpParam { typedef typename DtypeTensorTrait::gtype GType; typedef typename DtypeTensorTrait::rtype RType; public: ElementwiseSubParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_y_ = InputYFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_y_ = InputYFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); axis_ = GetAttr("axis", attrs); } @@ -609,16 +639,17 @@ class ElementwiseSubParam : OpParam { #ifdef MUL_OP template -class MulParam : OpParam { +class MulParam : public OpParam { typedef typename DtypeTensorTrait::gtype GType; typedef typename DtypeTensorTrait::rtype RType; public: MulParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_y_ = InputYFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_y_ = InputYFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); x_num_col_dims_ = GetAttr("x_num_col_dims", attrs); y_num_col_dims_ = GetAttr("y_num_col_dims", attrs); } @@ -650,9 +681,10 @@ class ConcatParam : public OpParam { public: ConcatParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - inputs_ = InputMultiFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + inputs_ = InputMultiFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); axis_ = GetAttr("axis", attrs); } @@ -686,11 +718,12 @@ class SumParam : public OpParam { public: SumParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - inputs_vars_ = InputMultiVarsFrom(inputs, scope); - out_var_ = OutVarFrom(outputs, scope); - inputs_ = InputMultiFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + inputs_vars_ = InputMultiVarsFrom(inputs, *scope); + out_var_ = OutVarFrom(outputs, *scope); + inputs_ = InputMultiFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); } vector InputsVars() const { return inputs_vars_; } @@ -717,10 +750,11 @@ class LrnParam : public OpParam { public: LrnParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); - mid_out_ = MidOutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); + mid_out_ = MidOutFrom(outputs, *scope); n_ = GetAttr("n", attrs); alpha_ = GetAttr("alpha", attrs); beta_ = GetAttr("beta", attrs); @@ -758,16 +792,17 @@ class LrnParam : public OpParam { #ifdef NORM_OP template -class NormParam : OpParam { +class NormParam : public OpParam { typedef typename DtypeTensorTrait::gtype GType; typedef typename DtypeTensorTrait::rtype RType; public: NormParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); - output_norm_ = OutputNormFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); + output_norm_ = OutputNormFrom(outputs, *scope); epsilon_ = GetAttr("epsilon", attrs); axis_ = GetAttr("axis", attrs); } @@ -793,19 +828,20 @@ class NormParam : OpParam { #ifdef BATCHNORM_OP template -class BatchNormParam : OpParam { +class BatchNormParam : public OpParam { typedef typename DtypeTensorTrait::gtype GType; typedef typename DtypeTensorTrait::rtype RType; public: BatchNormParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - output_y_ = OutputYFrom(outputs, scope); - input_bias_ = InputBiasFrom(inputs, scope); - input_mean_ = InputMeanFrom(inputs, scope); - input_scale_ = InputScaleFrom(inputs, scope); - input_variance_ = InputVarianceFrom(inputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + output_y_ = OutputYFrom(outputs, *scope); + input_bias_ = InputBiasFrom(inputs, *scope); + input_mean_ = InputMeanFrom(inputs, *scope); + input_scale_ = InputScaleFrom(inputs, *scope); + input_variance_ = InputVarianceFrom(inputs, *scope); epsilon_ = GetAttr("epsilon", attrs); momentum_ = GetAttr("momentum", attrs); // is_test_ = GetAttr("is_test", attrs); @@ -863,10 +899,11 @@ class PoolParam : public OpParam { public: PoolParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_ = InputXFrom(inputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = InputXFrom(inputs, *scope); - output_ = OutFrom(outputs, scope); + output_ = OutFrom(outputs, *scope); pooling_type_ = GetStringAttr("pooling_type", attrs); ksize_ = GetAttr>("ksize", attrs); strides_ = GetAttr>("strides", attrs); @@ -920,11 +957,12 @@ class PriorBoxParam : public OpParam { public: PriorBoxParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_ = InputFrom(inputs, scope); - input_image_ = InputImageFrom(inputs, scope); - output_boxes_ = OutputBoxesFrom(outputs, scope); - output_variances_ = OutputVariancesFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = InputFrom(inputs, *scope); + input_image_ = InputImageFrom(inputs, *scope); + output_boxes_ = OutputBoxesFrom(outputs, *scope); + output_variances_ = OutputVariancesFrom(outputs, *scope); min_sizes_ = GetAttr>("min_sizes", attrs); max_sizes_ = GetAttr>("max_sizes", attrs); aspect_ratios_ = GetAttr>("aspect_ratios", attrs); @@ -998,11 +1036,12 @@ class BoxCoderParam : public OpParam { public: BoxCoderParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_priorbox_ = InputPriorBoxFrom(inputs, scope); - input_priorboxvar_ = InputPriorBoxVarFrom(inputs, scope); - input_targetbox_ = InputTargetBoxFrom(inputs, scope); - output_box_ = OutputBoxFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_priorbox_ = InputPriorBoxFrom(inputs, *scope); + input_priorboxvar_ = InputPriorBoxVarFrom(inputs, *scope); + input_targetbox_ = InputTargetBoxFrom(inputs, *scope); + output_box_ = OutputBoxFrom(outputs, *scope); code_type_ = GetStringAttr("code_type", attrs); } const RType *InputPriorBox() const { return input_priorbox_; } @@ -1032,9 +1071,10 @@ class SoftmaxParam : public OpParam { public: SoftmaxParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); } const GType *InputX() const { return input_x_; } GType *Out() const { return out_; } @@ -1068,9 +1108,10 @@ class SigmoidParam : public OpParam { public: SigmoidParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); } const RType *InputX() const { return input_x_; } RType *Out() const { return out_; } @@ -1099,10 +1140,11 @@ class MultiClassNMSParam : public OpParam { public: MultiClassNMSParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_bboxes_ = InputBBoxesFrom(inputs, scope); - input_scores_ = InputScoresFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_bboxes_ = InputBBoxesFrom(inputs, *scope); + input_scores_ = InputScoresFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); background_label_ = GetAttr("background_label", attrs); nms_top_k_ = GetAttr("nms_top_k", attrs); keep_top_k_ = GetAttr("keep_top_k", attrs); @@ -1151,9 +1193,10 @@ class PolygonBoxTransformParam : public OpParam { public: PolygonBoxTransformParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_ = InputFrom(inputs, scope); - output_ = OutputFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = InputFrom(inputs, *scope); + output_ = OutputFrom(outputs, *scope); } const RType *Input() const { return input_; } RType *Output() const { return output_; } @@ -1171,16 +1214,17 @@ class FeedParam : public OpParam { public: FeedParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { #ifdef PADDLE_MOBILE_FPGA static int feed_num = 0; auto new_name = std::string("feed") + std::to_string(feed_num++); const_cast(inputs).at("X") = {string(new_name)}; #endif - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); - auto var = scope.FindVar("batch_size"); + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); + auto var = scope->FindVar("batch_size"); batch_size = var->GetValue(); } const LoDTensor *InputX() const { return input_x_; } @@ -1200,14 +1244,15 @@ class FetchParam : public OpParam { public: FetchParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { #ifdef PADDLE_MOBILE_FPGA static int fetch_num = 0; auto new_name = std::string("fetch") + std::to_string(fetch_num++); const_cast(outputs).at("Out") = {string(new_name)}; #endif - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); } const RType *InputX() const { return input_x_; } @@ -1237,9 +1282,10 @@ class FillConstantParam : public OpParam { public: FillConstantParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - out_var_ = OutVarFrom(outputs, scope); - out_ = OutFrom(outputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + out_var_ = OutVarFrom(outputs, *scope); + out_ = OutFrom(outputs, *scope); dtype_ = GetAttr("dtype", attrs); shape_ = GetAttr>("shape", attrs); value_ = GetAttr("value", attrs); @@ -1272,9 +1318,10 @@ class TransposeParam : public OpParam { public: TransposeParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); axis_ = GetAttr>("axis", attrs); } @@ -1299,10 +1346,11 @@ class Transpose2Param : public OpParam { public: Transpose2Param(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); - output_xshape_ = OutputXShapeFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); + output_xshape_ = OutputXShapeFrom(outputs, *scope); axis_ = GetAttr>("axis", attrs); } @@ -1330,10 +1378,11 @@ class LookupParam : public OpParam { public: LookupParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_w_ = InputWFrom(inputs, scope); - input_ids_ = InputIdsFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_w_ = InputWFrom(inputs, *scope); + input_ids_ = InputIdsFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); padding_idx_ = GetAttr("padding_idx", attrs); } @@ -1360,12 +1409,13 @@ class CrfParam : public OpParam { // {G_OP_TYPE_CRF, {{"Emission", "Transition", "Label"}, {"ViterbiPath"}}}, CrfParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { // todo crf params - input_emission_ = InputEmissionFrom(inputs, scope); - input_transition_ = InputTransitionFrom(inputs, scope); - input_label_ = InputLabelFrom(inputs, scope); - output_viterbipath_ = OutputViterbiPathFrom(outputs, scope); + input_emission_ = InputEmissionFrom(inputs, *scope); + input_transition_ = InputTransitionFrom(inputs, *scope); + input_label_ = InputLabelFrom(inputs, *scope); + output_viterbipath_ = OutputViterbiPathFrom(outputs, *scope); // padding_idx_ = GetAttr("padding_idx", attrs); } const GType *InputEmission() const { return input_emission_; } @@ -1396,10 +1446,11 @@ class ReshapeParam : public OpParam { public: ReshapeParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_shape_ = InputShapeFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_shape_ = InputShapeFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); shape_ = GetAttr>("shape", attrs); if (HasAttr("inplace", attrs)) { @@ -1437,11 +1488,12 @@ class Reshape2Param : public OpParam { public: Reshape2Param(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_shape_ = InputShapeFrom(inputs, scope); - out_ = OutFrom(outputs, scope); - output_xshape_ = OutputXShapeFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_shape_ = InputShapeFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); + output_xshape_ = OutputXShapeFrom(outputs, *scope); shape_ = GetAttr>("shape", attrs); if (HasAttr("inplace", attrs)) { inplace_ = GetAttr("inplace", attrs); @@ -1480,10 +1532,11 @@ class ScaleParam : public OpParam { public: ScaleParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_bias_ = InputBiasFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_bias_ = InputBiasFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); inplace_ = GetAttr("inplace", attrs); has_bias_ = GetAttr("has_bias", attrs); scales_ = GetAttr>("scales", attrs); @@ -1523,9 +1576,10 @@ class SliceParam : public OpParam { public: SliceParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_ = InputFrom(inputs, scope); - output_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = InputFrom(inputs, *scope); + output_ = OutFrom(outputs, *scope); axes_ = GetAttr>("axes", attrs); starts_ = GetAttr>("starts", attrs); @@ -1549,10 +1603,11 @@ class ResizeParam : public OpParam { public: ResizeParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_shape_ = InputShapeFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_shape_ = InputShapeFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); is_pyramid_test_ = GetAttr("is_pyramid_test", attrs); height_ = GetAttr("height", attrs); width_ = GetAttr("width", attrs); @@ -1599,9 +1654,10 @@ class ReluParamBase : public OpParam { public: ReluParamBase(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); } const RType *InputX() const { return input_x_; } @@ -1641,9 +1697,10 @@ class TanhParam : public OpParam { public: TanhParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); } const RType *InputX() const { return input_x_; } RType *Out() const { return out_; } @@ -1676,12 +1733,13 @@ class PReluParam : public OpParam { public: PReluParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { DLOG << "PReluParam inputs before"; - input_x_ = InputXFrom(inputs, scope); - alpha_ = InputAlphaFrom(inputs, scope); + input_x_ = InputXFrom(inputs, *scope); + alpha_ = InputAlphaFrom(inputs, *scope); framework::DDim dims = alpha_->dims(); - out_ = OutFrom(outputs, scope); + out_ = OutFrom(outputs, *scope); mode_ = GetStringAttr("mode", attrs); DLOG << "PReluParam mode after" << mode_; } @@ -1705,11 +1763,12 @@ class FusionFcParam : public OpParam { public: FusionFcParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_y_ = InputYFrom(inputs, scope); - input_z_ = InputZFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_y_ = InputYFrom(inputs, *scope); + input_z_ = InputZFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); x_num_col_dims_ = GetAttr("x_num_col_dims", attrs); y_num_col_dims_ = GetAttr("y_num_col_dims", attrs); axis_ = GetAttr("axis", attrs); @@ -1760,11 +1819,11 @@ class FusionConvAddParam : public ConvParam { public: FusionConvAddParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) + Scope *scope) : ConvParam(inputs, outputs, attrs, scope) { - bias_ = OpParam::InputYFrom(inputs, scope); + bias_ = OpParam::InputYFrom(inputs, *scope); axis_ = OpParam::GetAttr("axis", attrs); - output_ = OpParam::OutFrom(outputs, scope); + output_ = OpParam::OutFrom(outputs, *scope); } RType *Bias() const { return bias_; } @@ -1787,7 +1846,7 @@ class FusionConvAddReluParam : public FusionConvAddParam { public: FusionConvAddReluParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : FusionConvAddParam(inputs, outputs, attrs, scope) {} }; #endif @@ -1801,14 +1860,14 @@ class FusionConvAddPReluParam : public ConvParam { public: FusionConvAddPReluParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : ConvParam(inputs, outputs, attrs, scope) { - alpha_ = OpParam::InputAlphaFrom(inputs, scope); + alpha_ = OpParam::InputAlphaFrom(inputs, *scope); mode_ = OpParam::GetStringAttr("mode", attrs); framework::DDim dims = alpha_->dims(); - bias_ = OpParam::InputYFrom(inputs, scope); + bias_ = OpParam::InputYFrom(inputs, *scope); axis_ = OpParam::GetAttr("axis", attrs); - output_ = OpParam::OutFrom(outputs, scope); + output_ = OpParam::OutFrom(outputs, *scope); } const RType *InputAlpha() const { return alpha_; } const std::string &Mode() const { return mode_; } @@ -1834,22 +1893,22 @@ class FusionConvAddAddPReluParam : public ConvParam { public: FusionConvAddAddPReluParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : ConvParam(inputs, outputs, attrs, scope) { - bias1_ = OpParam::InputYFrom1(inputs, scope); - alpha_ = OpParam::InputAlphaFrom(inputs, scope); + bias1_ = OpParam::InputYFrom1(inputs, *scope); + alpha_ = OpParam::InputAlphaFrom(inputs, *scope); mode_ = OpParam::GetStringAttr("mode", attrs); framework::DDim dims = alpha_->dims(); - bias_ = OpParam::InputYFrom(inputs, scope); - output_ = OpParam::OutFrom(outputs, scope); + bias_ = OpParam::InputYFrom(inputs, *scope); + output_ = OpParam::OutFrom(outputs, *scope); axis_ = OpParam::GetAttr("axis", attrs); - keyOutput_ = OpParam::getkey("addOut", inputs, 0); - keyX1_ = OpParam::getkey("addX", inputs, 1); - keyY1_ = OpParam::getkey("Y", inputs, 1); + keyOutput_ = OpParam::Getkey("addOut", inputs, 0); + keyX1_ = OpParam::Getkey("addX", inputs, 1); + keyY1_ = OpParam::Getkey("Y", inputs, 1); if (keyX1_ == keyOutput_) { - bias1_ = OpParam::InputYFrom1(inputs, scope); + bias1_ = OpParam::InputYFrom1(inputs, *scope); } else if (keyY1_ == keyOutput_) { - bias1_ = OpParam::InputXFrom1(inputs, scope); + bias1_ = OpParam::InputXFrom1(inputs, *scope); } } const RType *InputAlpha() const { return alpha_; } @@ -1883,15 +1942,15 @@ class FusionConvAddBNReluParam : public ConvParam { public: FusionConvAddBNReluParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : ConvParam(inputs, outputs, attrs, scope) { - bias_ = OpParam::InputYFrom(inputs, scope); + bias_ = OpParam::InputYFrom(inputs, *scope); axis_ = OpParam::GetAttr("axis", attrs); - output_ = OpParam::OutFrom(outputs, scope); - input_bias_ = OpParam::InputBiasFrom(inputs, scope); - input_mean_ = OpParam::InputMeanFrom(inputs, scope); - input_scale_ = OpParam::InputScaleFrom(inputs, scope); - input_variance_ = OpParam::InputVarianceFrom(inputs, scope); + output_ = OpParam::OutFrom(outputs, *scope); + input_bias_ = OpParam::InputBiasFrom(inputs, *scope); + input_mean_ = OpParam::InputMeanFrom(inputs, *scope); + input_scale_ = OpParam::InputScaleFrom(inputs, *scope); + input_variance_ = OpParam::InputVarianceFrom(inputs, *scope); epsilon_ = OpParam::GetAttr("epsilon", attrs); momentum_ = OpParam::GetAttr("momentum", attrs); // is_test_ = OpParam::GetAttr("is_test", attrs); @@ -1949,24 +2008,24 @@ class FusionConvBNAddReluParam : public ConvParam { public: FusionConvBNAddReluParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : ConvParam(inputs, outputs, attrs, scope) { - bias_ = OpParam::InputYFrom(inputs, scope); + bias_ = OpParam::InputYFrom(inputs, *scope); axis_ = OpParam::GetAttr("axis", attrs); - output_ = OpParam::OutFrom(outputs, scope); - input_bias_ = OpParam::InputBiasFrom(inputs, scope); - input_mean_ = OpParam::InputMeanFrom(inputs, scope); - input_scale_ = OpParam::InputScaleFrom(inputs, scope); - input_variance_ = OpParam::InputVarianceFrom(inputs, scope); + output_ = OpParam::OutFrom(outputs, *scope); + input_bias_ = OpParam::InputBiasFrom(inputs, *scope); + input_mean_ = OpParam::InputMeanFrom(inputs, *scope); + input_scale_ = OpParam::InputScaleFrom(inputs, *scope); + input_variance_ = OpParam::InputVarianceFrom(inputs, *scope); epsilon_ = OpParam::GetAttr("epsilon", attrs); momentum_ = OpParam::GetAttr("momentum", attrs); - keyBNY_ = OpParam::getkey("BNY", inputs, 0); - keyX_ = OpParam::getkey("X", inputs, 0); - keyY_ = OpParam::getkey("Y", inputs, 0); + keyBNY_ = OpParam::Getkey("BNY", inputs, 0); + keyX_ = OpParam::Getkey("X", inputs, 0); + keyY_ = OpParam::Getkey("Y", inputs, 0); if (keyX_ == keyBNY_) { - bias_ = OpParam::InputYFrom(inputs, scope); + bias_ = OpParam::InputYFrom(inputs, *scope); } else if (keyY_ == keyBNY_) { - bias_ = OpParam::InputXFrom(inputs, scope); + bias_ = OpParam::InputXFrom(inputs, *scope); } // is_test_ = OpParam::GetAttr("is_test", attrs); } @@ -2026,13 +2085,13 @@ class FusionConvBNParam : public ConvParam { public: FusionConvBNParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) + Scope *scope) : ConvParam(inputs, outputs, attrs, scope) { - output_y_ = OpParam::OutputYFrom(outputs, scope); - input_bias_ = OpParam::InputBiasFrom(inputs, scope); - input_mean_ = OpParam::InputMeanFrom(inputs, scope); - input_scale_ = OpParam::InputScaleFrom(inputs, scope); - input_variance_ = OpParam::InputVarianceFrom(inputs, scope); + output_y_ = OpParam::OutputYFrom(outputs, *scope); + input_bias_ = OpParam::InputBiasFrom(inputs, *scope); + input_mean_ = OpParam::InputMeanFrom(inputs, *scope); + input_scale_ = OpParam::InputScaleFrom(inputs, *scope); + input_variance_ = OpParam::InputVarianceFrom(inputs, *scope); epsilon_ = OpParam::GetAttr("epsilon", attrs); momentum_ = OpParam::GetAttr("momentum", attrs); // is_test_ = OpParam::GetAttr("is_test", attrs); @@ -2084,15 +2143,15 @@ class FusionConvAddBNParam : public ConvParam { public: FusionConvAddBNParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : ConvParam(inputs, outputs, attrs, scope) { - bias_ = OpParam::InputYFrom(inputs, scope); + bias_ = OpParam::InputYFrom(inputs, *scope); axis_ = OpParam::GetAttr("axis", attrs); - output_y_ = OpParam::OutputYFrom(outputs, scope); - input_bias_ = OpParam::InputBiasFrom(inputs, scope); - input_mean_ = OpParam::InputMeanFrom(inputs, scope); - input_scale_ = OpParam::InputScaleFrom(inputs, scope); - input_variance_ = OpParam::InputVarianceFrom(inputs, scope); + output_y_ = OpParam::OutputYFrom(outputs, *scope); + input_bias_ = OpParam::InputBiasFrom(inputs, *scope); + input_mean_ = OpParam::InputMeanFrom(inputs, *scope); + input_scale_ = OpParam::InputScaleFrom(inputs, *scope); + input_variance_ = OpParam::InputVarianceFrom(inputs, *scope); epsilon_ = OpParam::GetAttr("epsilon", attrs); momentum_ = OpParam::GetAttr("momentum", attrs); // is_test_ = OpParam::GetAttr("is_test", attrs); @@ -2150,13 +2209,13 @@ class FusionDWConvBNReluParam : public ConvParam { public: FusionDWConvBNReluParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : ConvParam(inputs, outputs, attrs, scope) { - output_ = OpParam::OutFrom(outputs, scope); - input_bias_ = OpParam::InputBiasFrom(inputs, scope); - input_mean_ = OpParam::InputMeanFrom(inputs, scope); - input_scale_ = OpParam::InputScaleFrom(inputs, scope); - input_variance_ = OpParam::InputVarianceFrom(inputs, scope); + output_ = OpParam::OutFrom(outputs, *scope); + input_bias_ = OpParam::InputBiasFrom(inputs, *scope); + input_mean_ = OpParam::InputMeanFrom(inputs, *scope); + input_scale_ = OpParam::InputScaleFrom(inputs, *scope); + input_variance_ = OpParam::InputVarianceFrom(inputs, *scope); epsilon_ = OpParam::GetAttr("epsilon", attrs); momentum_ = OpParam::GetAttr("momentum", attrs); // is_test_ = OpParam::GetAttr("is_test", attrs); @@ -2209,13 +2268,13 @@ class FusionConvBNReluParam : public ConvParam { public: FusionConvBNReluParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : ConvParam(inputs, outputs, attrs, scope) { - output_ = OpParam::OutFrom(outputs, scope); - input_bias_ = OpParam::InputBiasFrom(inputs, scope); - input_mean_ = OpParam::InputMeanFrom(inputs, scope); - input_scale_ = OpParam::InputScaleFrom(inputs, scope); - input_variance_ = OpParam::InputVarianceFrom(inputs, scope); + output_ = OpParam::OutFrom(outputs, *scope); + input_bias_ = OpParam::InputBiasFrom(inputs, *scope); + input_mean_ = OpParam::InputMeanFrom(inputs, *scope); + input_scale_ = OpParam::InputScaleFrom(inputs, *scope); + input_variance_ = OpParam::InputVarianceFrom(inputs, *scope); epsilon_ = OpParam::GetAttr("epsilon", attrs); momentum_ = OpParam::GetAttr("momentum", attrs); // is_test_ = OpParam::GetAttr("is_test", attrs); @@ -2267,9 +2326,10 @@ class Im2SequenceParam : public OpParam { public: Im2SequenceParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); kernels_ = GetAttr>("kernels", attrs); strides_ = GetAttr>("strides", attrs); paddings_ = GetAttr>("paddings", attrs); @@ -2302,9 +2362,10 @@ class DropoutParam : public OpParam { public: DropoutParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); dropout_prob_ = GetAttr("dropout_prob", attrs); } @@ -2330,12 +2391,13 @@ class ConvTransposeParam : public OpParam { public: ConvTransposeParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - filter_ = FilterFrom(inputs, scope); - input_ = InputFrom(inputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + filter_ = FilterFrom(inputs, *scope); + input_ = InputFrom(inputs, *scope); // output_ = OutputFrom(outputs, scope); if (outputs.count("Output")) { - output_ = OpParam::OutputFrom(outputs, scope); + output_ = OpParam::OutputFrom(outputs, *scope); } strides_ = GetAttr>("strides", attrs); paddings_ = GetAttr>("paddings", attrs); @@ -2393,11 +2455,11 @@ class FusionDeconvAddParam : public ConvTransposeParam { public: FusionDeconvAddParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : ConvTransposeParam(inputs, outputs, attrs, scope) { - bias_ = OpParam::InputYFrom(inputs, scope); + bias_ = OpParam::InputYFrom(inputs, *scope); axis_ = OpParam::GetAttr("axis", attrs); - output_ = OpParam::OutFrom(outputs, scope); + output_ = OpParam::OutFrom(outputs, *scope); } RType *Bias() const { return bias_; } @@ -2425,13 +2487,13 @@ class FusionDeconvAddBNParam : public ConvTransposeParam { public: FusionDeconvAddBNParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : ConvTransposeParam(inputs, outputs, attrs, scope) { - output_ = OpParam::OutFrom(outputs, scope); - input_bias_ = OpParam::InputBiasFrom(inputs, scope); - input_mean_ = OpParam::InputMeanFrom(inputs, scope); - input_scale_ = OpParam::InputScaleFrom(inputs, scope); - input_variance_ = OpParam::InputVarianceFrom(inputs, scope); + output_ = OpParam::OutFrom(outputs, *scope); + input_bias_ = OpParam::InputBiasFrom(inputs, *scope); + input_mean_ = OpParam::InputMeanFrom(inputs, *scope); + input_scale_ = OpParam::InputScaleFrom(inputs, *scope); + input_variance_ = OpParam::InputVarianceFrom(inputs, *scope); epsilon_ = OpParam::GetAttr("epsilon", attrs); momentum_ = OpParam::GetAttr("momentum", attrs); // is_test_ = OpParam::GetAttr("is_test", attrs); @@ -2482,13 +2544,13 @@ class FusionDeconvAddBNReluParam : public ConvTransposeParam { public: FusionDeconvAddBNReluParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : ConvTransposeParam(inputs, outputs, attrs, scope) { - output_ = OpParam::OutFrom(outputs, scope); - input_bias_ = OpParam::InputBiasFrom(inputs, scope); - input_mean_ = OpParam::InputMeanFrom(inputs, scope); - input_scale_ = OpParam::InputScaleFrom(inputs, scope); - input_variance_ = OpParam::InputVarianceFrom(inputs, scope); + output_ = OpParam::OutFrom(outputs, *scope); + input_bias_ = OpParam::InputBiasFrom(inputs, *scope); + input_mean_ = OpParam::InputMeanFrom(inputs, *scope); + input_scale_ = OpParam::InputScaleFrom(inputs, *scope); + input_variance_ = OpParam::InputVarianceFrom(inputs, *scope); epsilon_ = OpParam::GetAttr("epsilon", attrs); momentum_ = OpParam::GetAttr("momentum", attrs); // is_test_ = OpParam::GetAttr("is_test", attrs); @@ -2550,17 +2612,18 @@ class GruParam : public OpParam { * @param scope * */ GruParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_input_ = InputFrom(inputs, scope); - input_h0_ = InputH0From(inputs, scope); - input_bias_ = InputBiasFrom(inputs, scope); - input_weight_ = InputWeightFrom(inputs, scope); - - output_batch_gate_ = OutputBatchGateFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_input_ = InputFrom(inputs, *scope); + input_h0_ = InputH0From(inputs, *scope); + input_bias_ = InputBiasFrom(inputs, *scope); + input_weight_ = InputWeightFrom(inputs, *scope); + + output_batch_gate_ = OutputBatchGateFrom(outputs, *scope); output_batch_reset_hidden_prev_ = - OutputBatchResetHiddenPrevFrom(outputs, scope); - output_batch_hidden_ = OutputBatchHiddenFrom(outputs, scope); - output_hidden_ = OutputHiddenFrom(outputs, scope); + OutputBatchResetHiddenPrevFrom(outputs, *scope); + output_batch_hidden_ = OutputBatchHiddenFrom(outputs, *scope); + output_hidden_ = OutputHiddenFrom(outputs, *scope); activation_ = GetStringAttr("activation", attrs); gate_activation_ = GetStringAttr("gate_activation", attrs); is_reverse_ = GetAttr("is_reverse", attrs); @@ -2603,16 +2666,17 @@ class GruUnitParam : public OpParam { public: GruUnitParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_input_ = InputFrom(inputs, scope); - input_hidden_prev_ = InputHiddenPrevFrom(inputs, scope); - input_bias_ = InputBiasFrom(inputs, scope); - input_weight_ = InputWeightFrom(inputs, scope); - - output_gate_ = OutputGateFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_input_ = InputFrom(inputs, *scope); + input_hidden_prev_ = InputHiddenPrevFrom(inputs, *scope); + input_bias_ = InputBiasFrom(inputs, *scope); + input_weight_ = InputWeightFrom(inputs, *scope); + + output_gate_ = OutputGateFrom(outputs, *scope); output_reset_hidden_prev_ = - OutputResetHiddenPrevFrom(outputs, scope); - output_hidden_ = OutputHiddenFrom(outputs, scope); + OutputResetHiddenPrevFrom(outputs, *scope); + output_hidden_ = OutputHiddenFrom(outputs, *scope); activation_ = GetAttr("activation", attrs); gate_activation_ = GetAttr("gate_activation", attrs); } @@ -2649,9 +2713,10 @@ class FlattenParam : public OpParam { public: FlattenParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); axis = GetAttr("axis", attrs); } const RType *InputX() const { return input_x_; } @@ -2673,9 +2738,10 @@ class SplitParam : public OpParam { public: SplitParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - outs_ = OutMultiFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + outs_ = OutMultiFrom(outputs, *scope); axis = GetAttr("axis", attrs); num = GetAttr("num", attrs); sections = GetAttr>("sections", attrs); @@ -2719,10 +2785,11 @@ class BilinearInterpParam : public OpParam { public: BilinearInterpParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_outsize_ = InputOutSizeFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_outsize_ = InputOutSizeFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); out_h_ = GetAttr("out_h", attrs); out_w_ = GetAttr("out_w", attrs); } @@ -2749,9 +2816,10 @@ class ShapeParam : public OpParam { public: ShapeParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_ = InputFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = InputFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); } const RType *Input() const { return input_; } RType *Out() const { return out_; } @@ -2770,10 +2838,11 @@ class TopKParam : public OpParam { public: TopKParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_ = OpParam::GetVarValue("X", inputs, scope); - output_ = OpParam::GetVarValue("Out", outputs, scope); - indices_ = OpParam::GetVarValue("Indices", outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = OpParam::GetVarValue("X", inputs, *scope); + output_ = OpParam::GetVarValue("Out", outputs, *scope); + indices_ = OpParam::GetVarValue("Indices", outputs, *scope); k_ = OpParam::GetAttr("k", attrs); } @@ -2793,9 +2862,10 @@ class CastParam : public OpParam { public: CastParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_ = OpParam::GetVarValue("X", inputs, scope); - output_ = OpParam::GetVarValue("Out", outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = OpParam::GetVarValue("X", inputs, *scope); + output_ = OpParam::GetVarValue("Out", outputs, *scope); input_type_ = OpParam::GetAttr("in_dtype", attrs); output_type_ = OpParam::GetAttr("out_dtype", attrs); } @@ -2816,16 +2886,17 @@ class QuantizeParam : public OpParam { public: QuantizeParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_ = InputXFrom(inputs, scope); - output_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = InputXFrom(inputs, *scope); + output_ = OutFrom(outputs, *scope); // online // scale = max(abs(x)) - online_scale_ = OpParam::GetVarValue("OutScale", outputs, scope); + online_scale_ = OpParam::GetVarValue("OutScale", outputs, *scope); // offline if (inputs.count("InScale")) { offline_ = true; - offline_scale_ = OpParam::GetVarValue("InScale", inputs, scope); + offline_scale_ = OpParam::GetVarValue("InScale", inputs, *scope); } // x = round(scale * x) if (OpParam::HasAttr("round_type", attrs)) { @@ -2857,10 +2928,11 @@ class DequantizeParam : public OpParam { public: DequantizeParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_ = InputXFrom(inputs, scope); - output_ = OutFrom(outputs, scope); - activation_scale_ = OpParam::GetVarValue("Scale", inputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = InputXFrom(inputs, *scope); + output_ = OutFrom(outputs, *scope); + activation_scale_ = OpParam::GetVarValue("Scale", inputs, *scope); // dequantization is performed as x = x / static_scale / online_scale if (OpParam::HasAttr("weight_scale", attrs)) { weight_scale_ = OpParam::GetAttr("weight_scale", attrs); @@ -2892,13 +2964,13 @@ class FusionDequantBNParam : public DequantizeParam { public: FusionDequantBNParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : DequantizeParam(inputs, outputs, attrs, scope) { // batch norm params - bn_mean_ = OpParam::GetVarValue("BNMean", inputs, scope); - bn_variance_ = OpParam::GetVarValue("BNVariance", inputs, scope); - bn_scale_ = OpParam::GetVarValue("BNScale", inputs, scope); - bn_bias_ = OpParam::GetVarValue("BNBias", inputs, scope); + bn_mean_ = OpParam::GetVarValue("BNMean", inputs, *scope); + bn_variance_ = OpParam::GetVarValue("BNVariance", inputs, *scope); + bn_scale_ = OpParam::GetVarValue("BNScale", inputs, *scope); + bn_bias_ = OpParam::GetVarValue("BNBias", inputs, *scope); epsilon_ = OpParam::GetAttr("epsilon", attrs); } @@ -2924,11 +2996,11 @@ class FusionDequantAddBNParam : public FusionDequantBNParam { public: FusionDequantAddBNParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : FusionDequantBNParam(inputs, outputs, attrs, scope) { // element wise add params axis_ = OpParam::GetAttr("axis", attrs); - bias_ = OpParam::InputYFrom(inputs, scope); + bias_ = OpParam::InputYFrom(inputs, *scope); } public: @@ -2947,14 +3019,14 @@ class FusionDequantAddBNQuantParam : public FusionDequantAddBNParam { public: FusionDequantAddBNQuantParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) + const AttributeMap &attrs, Scope *scope) : FusionDequantAddBNParam(inputs, outputs, attrs, scope) { // scale output - online_scale_ = OpParam::GetVarValue("OutScale", outputs, scope); + online_scale_ = OpParam::GetVarValue("OutScale", outputs, *scope); // offline if (inputs.count("InScale")) { offline_ = true; - offline_scale_ = OpParam::GetVarValue("InScale", inputs, scope); + offline_scale_ = OpParam::GetVarValue("InScale", inputs, *scope); } // x = round(scale * x) if (OpParam::HasAttr("round_type", attrs)) { @@ -2983,10 +3055,11 @@ class SequenceExpandParam : public OpParam { public: SequenceExpandParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_y_ = InputYFrom(inputs, scope); - output_ = OutFrom(outputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_y_ = InputYFrom(inputs, *scope); + output_ = OutFrom(outputs, *scope); ref_level_ = -1; if (OpParam::HasAttr("ref_level", attrs)) { ref_level_ = OpParam::GetAttr("ref_level", attrs); @@ -3010,9 +3083,10 @@ class SequencePoolParam : public OpParam { public: SequencePoolParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_ = InputXFrom(inputs, scope); - output_ = OutFrom(outputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = InputXFrom(inputs, *scope); + output_ = OutFrom(outputs, *scope); pool_type_ = "MAX"; if (OpParam::HasAttr("pooltype", attrs)) { pool_type_ = OpParam::GetStringAttr("pooltype", attrs); @@ -3034,12 +3108,13 @@ class LodResetParam : public OpParam { public: LodResetParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - output_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + output_ = OutFrom(outputs, *scope); input_y_ = nullptr; if (inputs.count("Y")) { - input_y_ = InputYFrom(inputs, scope); + input_y_ = InputYFrom(inputs, *scope); } else { target_lod_ = OpParam::GetAttr>("target_lod", attrs); } @@ -3061,10 +3136,11 @@ class CompareParam : public OpParam { public: CompareParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_y_ = InputYFrom(inputs, scope); - output_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_y_ = InputYFrom(inputs, *scope); + output_ = OutFrom(outputs, *scope); axis_ = OpParam::GetAttr("axis", attrs); } @@ -3085,10 +3161,11 @@ class LogicalBinaryParam : public OpParam { public: LogicalBinaryParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - input_y_ = InputYFrom(inputs, scope); - output_ = OutFrom(outputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + input_y_ = InputYFrom(inputs, *scope); + output_ = OutFrom(outputs, *scope); } const GType *InputX() const { return input_x_; } @@ -3111,9 +3188,10 @@ class LogicalUnaryParam : public OpParam { public: LogicalUnaryParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - output_ = OutFrom(outputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + output_ = OutFrom(outputs, *scope); } const GType *InputX() const { return input_x_; } @@ -3131,7 +3209,7 @@ class LogicalUnaryParam : public OpParam { // public: // WhileParam(const VariableNameMap &inputs, // const VariableNameMap &outputs, const AttributeMap &attrs, -// const Scope &scope) { +// const Scope &scope) : OpParam(inputs, outputs, attrs, scope) { // cond_ = OpParam::GetVarValue("Condition", inputs, // scope); block_desc_ = OpParam::GetAttr("sub_block", attrs); @@ -3149,11 +3227,12 @@ class WriteToArrayParam : public OpParam { public: WriteToArrayParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { - input_ = OpParam::GetVarValue("X", inputs, scope); - index_ = OpParam::GetVarValue("I", inputs, scope); + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_ = OpParam::GetVarValue("X", inputs, *scope); + index_ = OpParam::GetVarValue("I", inputs, *scope); output_ = - OpParam::GetVarValue("Out", outputs, scope); + OpParam::GetVarValue("Out", outputs, *scope); } public: @@ -3169,11 +3248,13 @@ class ReadFromArrayParam : public OpParam { public: ReadFromArrayParam(const VariableNameMap &inputs, const VariableNameMap &outputs, const AttributeMap &attrs, - const Scope &scope) { + Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { input_ = - OpParam::GetVarValue("X", inputs, scope); - index_ = OpParam::GetVarValue("I", inputs, scope); - output_ = OpParam::GetVarValue("Out", outputs, scope); + OpParam::GetVarValue("X", inputs, *scope); + index_ = OpParam::GetVarValue("I", inputs, *scope); + output_ = + OpParam::GetVarValue("Out", outputs, *scope); } public: @@ -3191,9 +3272,10 @@ class IsEmptyParam : public OpParam { public: IsEmptyParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - output_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + output_ = OutFrom(outputs, *scope); } const GType *InputX() const { return input_x_; } @@ -3213,9 +3295,10 @@ class IncrementParam : public OpParam { public: IncrementParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - output_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + output_ = OutFrom(outputs, *scope); step_ = OpParam::GetAttr("step", attrs); } @@ -3237,9 +3320,10 @@ class Pad2dParam : public OpParam { public: Pad2dParam(const VariableNameMap &inputs, const VariableNameMap &outputs, - const AttributeMap &attrs, const Scope &scope) { - input_x_ = InputXFrom(inputs, scope); - out_ = OutFrom(outputs, scope); + const AttributeMap &attrs, Scope *scope) + : OpParam(inputs, outputs, attrs, scope) { + input_x_ = InputXFrom(inputs, *scope); + out_ = OutFrom(outputs, *scope); } const RType *InputX() const { return input_x_; } RType *Out() const { return out_; }