Tensorflow 缓存中间张量并定期更新

Tensorflow 缓存中间张量并定期更新,tensorflow,Tensorflow,我有一个大张量,计算起来很昂贵,但实际上我只需要每隔10次迭代(在梯度下降期间)重新计算它。最好的方法是什么 更具体地说: 假设我有一个中间张量,它用于每次运行atf.Session时计算最终张量final_tensor是一组用于优化的修改梯度。可以定义同时包含中间张量和最终张量的图。但是,当中间张量变化缓慢时,运行此图将效率低下。在伪代码中,我想这样做: intermediate_tensor = tf.some_operation(earlier_variable) final_tensor

我有一个大张量,计算起来很昂贵,但实际上我只需要每隔10次迭代(在梯度下降期间)重新计算它。最好的方法是什么

更具体地说:

假设我有一个
中间张量
,它用于每次运行a
tf.Session时计算
最终张量
<在我的例子中,code>final_tensor
是一组用于优化的修改梯度。可以定义同时包含
中间张量和
最终张量的图。但是,当中间张量变化缓慢时,运行此图将效率低下。在伪代码中,我想这样做:

intermediate_tensor = tf.some_operation(earlier_variable)
final_tensor = tf.matmul(intermediate_tensor, other_earlier_variable)

with tf.Session() as sess:
    # pretending `partial_run` works like I want it to:
    sess.partial_run(intermediate_tensor, feed_dict = {})
    for i in range(5):
       ft = sess.partial_run(final_tensor, feed_dict = {})
       print(ft)
实验性的
部分运行
功能几乎就是我想要的。但是,
partial\u run
只能在我每次计算
intermediate\u tensor
时使用
final\u tensor
。对于for循环,它不起作用

目前我的解决方法是使用
tf.placeholder
。我在对
sess.run
的一次调用中计算
intermediate\u tensor
,然后将结果作为占位符提供给新的
sess.run调用。然而,这是非常不灵活的。例如,它要求我在编译时硬编码变量形状。当我想使用的中间变量数量很大时,它也不是很好


有更好的办法吗?如果使用的曲率矩阵不需要每次迭代都进行计算,这将非常有用。

您可以使用常规运行和
feed\u dict
来输入值。使用持久性张量(ie)避免在TF运行时持久性张量中复制内容!正是我想要的。