读取张量流的源代码我发现Sigmoid Gradient Computation定义如下。
Status SigmoidGrad(const AttrSlice& attrs, FunctionDef* g) {
// clang-format off
return GradForUnaryCwise(g, {
{{"y"}, "Sigmoid", {"x"}},
FDH::Const("const", 1.0f),
{{"one"}, "Cast", {"const"}, {{"SrcT", DT_FLOAT}, {"DstT", "$T"}}},
{{"a"}, "Sub", {"one", "y"}, {}, {"dy"}},
{{"b"}, "Mul", {"y", "a"}}, // y * (1 - y)
{{"dx"}, "Mul", {"dy", "b"}}, // dy * y * (1 - y)
});
// clang-format on
}
我的问题是,为什么tensorflow会重新计算Sigmoid的输出以计算它的渐变。它不是存储在op的上下文中吗?
代码片段来自github
答案 0 :(得分:1)
答案 1 :(得分:0)
为什么tensorflow重新计算Sigmoid的渐变输出?
它没有 - 这就是tensorflow等框架之美。 Tensorflow will reuse nodes that can be reused.因此,渐变中的sigmoid节点将自动重用sigmoid计算。
请注意,节点重用比每操作优化要强大得多,因为优化可以在图中的任何位置,不同操作之间进行。