2017-03-07 72 views
0

以下是math_grad.cc line543到line554:FunctionDefHelper :: Create和FunctionDefHelper :: Define有什么区别?

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 :: Define或FDH :: Create。

据我所知,FDH :: Define是定义FunctionDef的老手。我认为与FDH :: Create相比,FDH :: Define提供的信息更少。

那么,任何人都可以帮助我区分?任何意见将不胜感激,非常感谢。从同事

回答

0

答:

“FunctionDefs是公共API的尚未一部分;这些都是定义函数,直到我们对他们真正的API支持临时机制 之一的这两个功能是老年人和镜子旧的FunctionDef格式,现在已被删除

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

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