2016-11-04 42 views
0

我想为张量赋值一次,并在后面的所有处理中保持不变。换句话说,我想实现类似如下的内容:如何在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对于单分支条件执行是不灵活的 - 即使fn2不是必需的,您总是必须为“真”和“假”情况提供两个函数fn1,fn2。

回答

0

Tensorflow不是一种过程式编程语言,它是一种图形编程语言。所以你必须以不同的方式思考事情。

从图表评估的角度来看,您可以在图表下游使用变量x。所以,如果你实际使用x,它必须首先计算(你必须初始化它)。 tf.identity需要做到这一点。

你还没有真正解释你想实现什么,但如果x取决于ComputeX(),并且ComputeX()不会发生,直到别的东西发生了,图形评估将采取这种顺序的依存关系的照顾了。 (图形评估顺序是用拓扑排序完成的。)

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