FunctionDefHelper :: Create和FunctionDefHelper :: Define有什么区别?

时间:2017-03-07 12:43:33

标签: tensorflow

以下是从math_grad.cc line543到line554:

543   *g = FDH::Create("_",
544                    // Input defs
545                    {"x:T", "i:int32", "dy:T"},
546                    // Ret val defs
547                    {"dx:T", "di:int32"},
548                    // Attr defs
549                    {{"T: {half, float, double}"}},
550                    // Nodes
551                    nodes,
552                    // Return values
553                    {{"dx", "dx:output:0"}, {"di", "di:y:0"}});
554   return Status::OK();

以下是从math_grad.cc line593到line615,

593 Status MinMaxGradHelper(const string& op, const AttrSlice& attrs,
594                         FunctionDef* g) {
595   // clang-format off
596   *g = FDH::Define(
597       // Arg defs
598       {"x:T", "i:int32", "dy:T"},
599       // Ret val defs
600       {"dx:T", "di:int32"},
601       // Attr defs
602       {{"T: {half, float, double}"}},
603       {
604         // keep_dims because we need to do x == y, which requires x
605         // and y are broadcastable.
606         {{"y"}, op, {"x", "i"}, {{"T", "$T"}, {"keep_dims", true}}},
607         {{"mask"}, "Equal", {"x", "y"}, {{"T", "$T"}}},
608         {{"mask_cast"}, "Cast", {"mask"}, {{"SrcT", DT_BOOL}, {"DstT", "$T"}}},
609         {{"mask_sum"}, "Sum", {"mask_cast", "i"}, {{"T", "$T"}}},
610         {{"norm_dy"}, "Div", {"dy", "mask_sum"}, {{"T", "$T"}}},
611         {{"sy"}, "Shape", {"y"}, {{"T", "$T"}}},
612         {{"norm_dy_reshaped"}, "Reshape", {"norm_dy", "sy"}, {{"T", "$T"}}},
613         {{"dx"}, "Mul", {"mask_cast", "norm_dy_reshaped"}, {{"T", "$T"}}},
614         {{"di"}, "ZerosLike", {"i"}, {{"T", DT_INT32}}}
615       });

我对TensorFlow如何确定是否使用感到有些困惑 FDH ::定义或FDH ::创建。

据我所知,FDH :: Define是定义FunctionDef的旧方法。而且我认为与FDH :: Create相比,FDH :: Define提供的信息更少。

那么,任何人都可以帮助我区分它们吗?非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

同事的回答:

“FunctionDefs还不是公共API的一部分;这些是用于定义函数的临时机制,直到我们为它们提供真正的API支持。 这两个函数中的一个较旧,并且镜像了较旧的FunctionDef格式,现在已被删除。

我没有删除该功能,我只是让它产生了新的格式;但这只适用于简单的情况。使用该函数的代码太多,无法迁移所有代码。

但重点是,这不是很好的记录,因为它不是我们的公共API的一部分,可能会发生变化。“