缓存中间张量并定期更新

时间:2017-10-23 20:04:31

标签: tensorflow

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

更具体地说:

假设每次运行intermediate_tensor时我都会使用final_tensor计算tf.Session。在我的例子中,final_tensor是一组用于优化的修改渐变。可以定义包含intermediate_tensorfinal_tensor的图表。但是,当intermediate_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_run功能几乎我正在寻找的东西。但是,只有在我每次评估partial_run时,我只想评估一次final_tensor时,才能使用intemediate_tensor。它不适用于for循环。

我目前的解决方法是使用tf.placeholder。我在对intermediate_tensor的一次调用中评估sess.run,然后将结果反馈给sess.run作为占位符的新调用。但是,这非常不灵活。例如,它要求我在编译时对变量形状进行硬编码。当我想要使用的中间变量的数量非常大时,它也不是很好。

有更好的方法吗?例如,如果一个人使用的曲率矩阵不需要在每次迭代时进行评估,那么这将非常有用。

0 个答案:

没有答案