我想只为张量赋值一次,并在以后的所有执行中保持不变。换句话说,我想实现以下内容:
x = tf.cond(tf.equal(x_ready, 0), ComputeX(), tf.no_op)
这当然行不通,因为tf.no_op不会返回张量。那么在Tensorflow中实现等效于以下C ++代码的简单方法是什么?
x_ready = false;
if (!x_ready) {
x = ComputeX();
x_ready = true;
} // and there is no "else" branch
请注意,我不希望以下列方式实施它:
x = tf.cond(tf.equal(x_ready, 0), ComputeX(), tf.identity(x))
因为" x"在此声明之前未声明。如果看起来Tensorflow对于单分支条件执行是不灵活的 - 你总是必须为" true"提供两个函数fn1,fn2。和"假"情况,即使不需要fn2。
答案 0 :(得分:0)
Tensorflow不是一种过程编程语言,它是一种图形编程语言。所以你必须对事情有所不同。
从图形评估的角度来看,您是否在图表中使用下游变量x
。因此,如果您实际使用x
,则必须首先计算它(您必须初始化它)。 tf.identity
是必要的。
您还没有真正解释过您要完成的工作,但如果x
取决于ComputeX()
,并且ComputeX()
在其他事情发生之前不会发生,那么图表评估将会采取已经关心这个顺序依赖。 (图形评估顺序是通过拓扑排序完成的。)
如果您确实需要建立依赖关系,请使用tf.control_dependencies()