Tensorflow强制执行

时间:2016-11-29 16:45:53

标签: python tensorflow

我在Python中编写一个tensorflow函数来实现一般延迟。它有一个内部状态,每次运行会话时都必须更新。

这是一个简单的一步滞后形式的最小例子:

def lag(x, name=None):
    with tf.name_scope(name, "lag"):
        zeros = tf.zeros(x.get_shape(), dtype=x.dtype)
        cache = tf.Variable(zeros, name="cache")
        output = tf.Variable(zeros, name="output")
        output = tf.assign(output, cache)
        cache = tf.assign(cache, x)
        return output

我们试一试:

x = tf.placeholder(tf.int32, [])
my_lag = lag(x)
with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    result = [sess.run(my_lag, feed_dict={x: i}) for i in range(1, 4)]
    print(result)

当我们想要的是[0, 0, 0]时,我们得到结果[0, 1, 2]

我们得到这个的原因是因为cache中的最终lag op未明确使用且永远不会被评估。我们可以通过在return

之前添加这样的行来强制进行评估
output = tf.tuple([output, cache])[0]

然后我们得到预期的输出[0, 1, 2]。但这似乎相当不优雅。是否有更好的方法来强制op进行评估?

作为一个额外的问题,在这个实现中我们可以看到使用了两个Variable。我找不到另一个解决方案来制作一个张量的临时副本,但我不明白为什么我不能只用一个Variable做同样的事情。还有另一种方式吗?

0 个答案:

没有答案