diff options
Diffstat (limited to 'tensorflow/core/common_runtime/eager/attr_builder.cc')
-rw-r--r-- | tensorflow/core/common_runtime/eager/attr_builder.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/tensorflow/core/common_runtime/eager/attr_builder.cc b/tensorflow/core/common_runtime/eager/attr_builder.cc index cf1cd4134e..5c8369de87 100644 --- a/tensorflow/core/common_runtime/eager/attr_builder.cc +++ b/tensorflow/core/common_runtime/eager/attr_builder.cc @@ -136,6 +136,22 @@ void AttrBuilder::FillAttrValueMap(AttrValueMap* m, m->insert(*it); } } + // For any attr-value pairs that exist in the op def (from op registry) but + // not `m`, fill them into `m`, so that we can run a TFE_Op without having to + // specify all the default attr values (e.g. for matmul, the `transpose_a` + // attr defaults to false). + const OpDef* op_def = nullptr; + Status s = OpDefForOp(op_name_.c_str(), &op_def); + // This is expected, if this op is a custom function, and is therefore not + // present in the op registry. + if (!s.ok()) return; + + DCHECK(op_def); + for (const auto& attr_def : op_def->attr()) { + if (attr_def.has_default_value() && !m->count(attr_def.name())) { + SetInAttrValueMap(m, attr_def.name(), attr_def.default_value()); + } + } } const NodeDef& AttrBuilder::BuildNodeDef() { |