Python 张力流力执行
我正在用Python编写一个tensorflow函数来实现一个通用的延迟。它有一个内部状态,每次运行会话时都必须更新该状态 以下是一个简单的一步滞后形式的最小示例:Python 张力流力执行,python,tensorflow,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")
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,1,2]
时,我们得到了结果[0,0,0]
我们得到这一结果的原因是,lag
中的最终cache
op没有被显式使用,也从未被计算过。我们可以通过在返回
之前添加这样一行来强制执行其计算:
output = tf.tuple([output, cache])[0]
然后我们得到预期的输出[0,1,2]
。但这似乎很不雅观。有没有更好的方法来强制对op进行评估
另外一个问题是,在这个实现中,我们可以看到使用了两个
变量。我找不到另一个解决方案来制作张量的临时副本,但我不明白为什么我不能用一个变量来做同样的事情。还有其他方法吗?您可以使用控件依赖项