以下是从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提供的信息更少。
那么,任何人都可以帮助我区分它们吗?非常感谢任何建议。
答案 0 :(得分:0)
同事的回答:
“FunctionDefs还不是公共API的一部分;这些是用于定义函数的临时机制,直到我们为它们提供真正的API支持。 这两个函数中的一个较旧,并且镜像了较旧的FunctionDef格式,现在已被删除。
我没有删除该功能,我只是让它产生了新的格式;但这只适用于简单的情况。使用该函数的代码太多,无法迁移所有代码。
但重点是,这不是很好的记录,因为它不是我们的公共API的一部分,可能会发生变化。“