如何在Tensorflow中运行此条件执行?

时间:2016-11-04 03:37:57

标签: tensorflow

我想只为张量赋值一次,并在以后的所有执行中保持不变。换句话说,我想实现以下内容:

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。

1 个答案:

答案 0 :(得分:0)

Tensorflow不是一种过程编程语言,它是一种图形编程语言。所以你必须对事情有所不同。

从图形评估的角度来看,您是否在图表中使用下游变量x。因此,如果您实际使用x,则必须首先计算它(您必须初始化它)。 tf.identity是必要的。

您还没有真正解释过您要完成的工作,但如果x取决于ComputeX(),并且ComputeX()在其他事情发生之前不会发生,那么图表评估将会采取已经关心这个顺序依赖。 (图形评估顺序是通过拓扑排序完成的。)

如果您确实需要建立依赖关系,请使用tf.control_dependencies()