From edb541f2926c6ef2cd7c9b1c5d0c80f692a50697 Mon Sep 17 00:00:00 2001 From: fengjiayi Date: Mon, 14 Aug 2017 11:47:00 -0700 Subject: [PATCH] fix compile errors --- paddle/framework/grad_op_builder.cc | 5 ++++- paddle/framework/op_registry.h | 20 ++++++++++---------- paddle/framework/operator.cc | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/paddle/framework/grad_op_builder.cc b/paddle/framework/grad_op_builder.cc index b316f2d535c..cb491ec95f6 100644 --- a/paddle/framework/grad_op_builder.cc +++ b/paddle/framework/grad_op_builder.cc @@ -25,8 +25,9 @@ static void TransOpArg(const OperatorBase* src_op, const OpArgType& src_type, const auto& src_inout = src_type == OpArgType::IN ? src_op->inputs_ : src_op->outputs_; auto& dst_inout = *vars; + const OpProto* proto = OpRegistry::op_info_map().at(src_op->type_).proto_; const auto& src_arg_list = - src_type == OpArgType::IN ? proto.inputs() : proto.outputs(); + src_type == OpArgType::IN ? proto->inputs() : proto->outputs(); for (const auto& arg : src_arg_list) { if (arg.no_gradient() && !is_grad) continue; const std::string src_name = arg.name(); @@ -43,6 +44,8 @@ OperatorBase* BuildGradOp(const OperatorBase* op) { auto it = OpRegistry::op_info_map().find(op->type_); PADDLE_ENFORCE(it != OpRegistry::op_info_map().end(), "'%s' has not been registered.", op->type_); + PADDLE_ENFORCE(it->second.proto_ != nullptr, "'%s' has no OpProto.", + op->type_); std::string grad_op_type = it->second.grad_op_type_; PADDLE_ENFORCE(!grad_op_type.empty(), "'%s' has no gradient operator.", op->type_); diff --git a/paddle/framework/op_registry.h b/paddle/framework/op_registry.h index 6dd5f4af224..120f4ede6ba 100644 --- a/paddle/framework/op_registry.h +++ b/paddle/framework/op_registry.h @@ -126,13 +126,6 @@ class NOPMaker : public OpProtoAndCheckerMaker { : OpProtoAndCheckerMaker(proto, op_checker) {} }; -struct OpInfo { - std::function creator_; - std::string grad_op_type_; - OpProto* proto_; - OpAttrChecker* checker_; -}; - class OpRegistry { using VarNameMap = OperatorBase::VarNameMap; using OpCreator = std::function; public: + struct OpInfo { + OpCreator creator_; + std::string grad_op_type_; + OpProto* proto_; + OpAttrChecker* checker_; + }; + template static void RegisterOp(const std::string& op_type, const std::string& grad_op_type) { @@ -175,9 +175,9 @@ class OpRegistry { } static std::shared_ptr CreateOp(const std::string& type, - const VarNameList& inputs, - const VarNameList& outputs, - const AttributeMap& attrs) { + const VarNameMap& inputs, + const VarNameMap& outputs, + AttributeMap attrs) { auto it = op_info_map().find(type); PADDLE_ENFORCE(it != op_info_map().end(), "Operator '%s' has not been registered.", type); diff --git a/paddle/framework/operator.cc b/paddle/framework/operator.cc index c054804477f..0daf12e7f5f 100644 --- a/paddle/framework/operator.cc +++ b/paddle/framework/operator.cc @@ -152,7 +152,7 @@ std::vector OperatorBase::OutputVars(bool has_intermediate) const { type_); // get all OpProto::Var for outputs - for (auto& o : it->second.proto_.outputs()) { + for (auto& o : it->second.proto_->outputs()) { // ignore all intermediate output if (o.intermediate()) continue; auto out = outputs_.find(o.name()); -- GitLab