commit
329370e8ca
@ -0,0 +1,85 @@
|
|||||||
|
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License. */
|
||||||
|
|
||||||
|
#include "paddle/framework/attribute.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace paddle {
|
||||||
|
namespace framework {
|
||||||
|
|
||||||
|
template <>
|
||||||
|
AttrType AttrTypeID<int>() {
|
||||||
|
return INT;
|
||||||
|
}
|
||||||
|
template <>
|
||||||
|
AttrType AttrTypeID<float>() {
|
||||||
|
return FLOAT;
|
||||||
|
}
|
||||||
|
template <>
|
||||||
|
AttrType AttrTypeID<std::string>() {
|
||||||
|
return STRING;
|
||||||
|
}
|
||||||
|
template <>
|
||||||
|
AttrType AttrTypeID<std::vector<int>>() {
|
||||||
|
return INTS;
|
||||||
|
}
|
||||||
|
template <>
|
||||||
|
AttrType AttrTypeID<std::vector<float>>() {
|
||||||
|
return FLOATS;
|
||||||
|
}
|
||||||
|
template <>
|
||||||
|
AttrType AttrTypeID<std::vector<std::string>>() {
|
||||||
|
return STRINGS;
|
||||||
|
}
|
||||||
|
|
||||||
|
Attribute GetAttrValue(const AttrDesc& attr_desc) {
|
||||||
|
switch (attr_desc.type()) {
|
||||||
|
case paddle::framework::AttrType::INT: {
|
||||||
|
return attr_desc.i();
|
||||||
|
}
|
||||||
|
case paddle::framework::AttrType::FLOAT: {
|
||||||
|
return attr_desc.f();
|
||||||
|
}
|
||||||
|
case paddle::framework::AttrType::STRING: {
|
||||||
|
return attr_desc.s();
|
||||||
|
}
|
||||||
|
case paddle::framework::AttrType::INTS: {
|
||||||
|
std::vector<int> val(attr_desc.ints_size());
|
||||||
|
for (int i = 0; i < attr_desc.ints_size(); ++i) {
|
||||||
|
val[i] = attr_desc.ints(i);
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
case paddle::framework::AttrType::FLOATS: {
|
||||||
|
std::vector<float> val(attr_desc.floats_size());
|
||||||
|
for (int i = 0; i < attr_desc.floats_size(); ++i) {
|
||||||
|
val[i] = attr_desc.floats(i);
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
case paddle::framework::AttrType::STRINGS: {
|
||||||
|
std::vector<std::string> val(attr_desc.strings_size());
|
||||||
|
for (int i = 0; i < attr_desc.strings_size(); ++i) {
|
||||||
|
val[i] = attr_desc.strings(i);
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PADDLE_ENFORCE(false, "Unknown OpDesc::AttrDesc::type !");
|
||||||
|
return boost::blank();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace framework
|
||||||
|
} // namespace paddle
|
File diff suppressed because it is too large
Load Diff
@ -1,48 +1,25 @@
|
|||||||
|
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License. */
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "paddle/framework/op_proto.pb.h"
|
|
||||||
#include "paddle/framework/operator.h"
|
#include "paddle/framework/operator.h"
|
||||||
|
|
||||||
namespace paddle {
|
namespace paddle {
|
||||||
namespace framework {
|
namespace framework {
|
||||||
class OpRegistry;
|
|
||||||
|
OperatorBase* BuildGradOp(const OperatorBase* op);
|
||||||
enum InOutType { IN, OUT };
|
|
||||||
|
|
||||||
struct OpInOutArg {
|
|
||||||
OpInOutArg(const std::string& proto_name, const InOutType& type,
|
|
||||||
bool needed_in_grad, size_t begin_idx, size_t end_idx)
|
|
||||||
: proto_name_(proto_name),
|
|
||||||
type_(type),
|
|
||||||
needed_in_grad_(needed_in_grad),
|
|
||||||
begin_idx_(begin_idx),
|
|
||||||
end_idx_(end_idx) {}
|
|
||||||
|
|
||||||
std::string proto_name_;
|
|
||||||
InOutType type_;
|
|
||||||
bool needed_in_grad_;
|
|
||||||
size_t begin_idx_;
|
|
||||||
size_t end_idx_;
|
|
||||||
};
|
|
||||||
|
|
||||||
class GradOpBuilder {
|
|
||||||
using VarIndexMap = std::unordered_map<std::string, int>;
|
|
||||||
|
|
||||||
public:
|
|
||||||
GradOpBuilder(const OperatorBase& op) : op_(op) {}
|
|
||||||
OperatorBase* Build();
|
|
||||||
|
|
||||||
private:
|
|
||||||
OpInOutArg* BuildArg(const VarProto& var, const VarIndexMap& var_map,
|
|
||||||
const std::vector<int>& format, InOutType type);
|
|
||||||
void BuildOpInOutArgList();
|
|
||||||
void AddArgIntoGradOp(const OpInOutArg* arg, std::vector<std::string>& in_out,
|
|
||||||
std::vector<int>& format, VarIndexMap* varmap, int& idx,
|
|
||||||
bool is_grad) const;
|
|
||||||
void CompleteGradOp(OperatorBase* grad_op) const;
|
|
||||||
const OperatorBase& op_;
|
|
||||||
std::vector<std::shared_ptr<OpInOutArg>> arg_list_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace framework
|
} // namespace framework
|
||||||
} // namespace paddle
|
} // namespace paddle
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue