gpt4 book ai didi

session - 在Tensorflow中,Session.partial_run和Session.run有什么区别?

转载 作者:行者123 更新时间:2023-12-02 19:05:41 25 4
gpt4 key购买 nike

我一直认为 Session.run 需要提供图表中的所有占位符,而 Session.partial_run 仅通过 Session.partial_run_setup< 指定的占位符,但进一步看,情况并非如此。

那么这两种方法到底有何区别呢?使用其中一种相对于另一种有哪些优点/缺点?

最佳答案

tf.Session.run ,您通常给出一些输入和预期输出,TensorFlow 运行图中的操作来计算并返回这些输出。如果您稍后想要获得其他输出,即使它具有相同的输入,您也必须再次运行图中的所有必要操作,即使某些中间结果与先前调用中的相同。例如,考虑这样的事情:

import tensorflow as tf

input_ = tf.placeholder(tf.float32)
result1 = some_expensive_operation(input_)
result2 = another_expensive_operation(result1)

with tf.Session() as sess:
x = ...
sess.run(result1, feed_dict={input_: x})
sess.run(result2, feed_dict={input_: x})

计算 result2 将需要运行 some_expense_operationanother_expense_operation 中的操作,但实际上大部分计算都是从 >result1 已计算。 tf.Session.partial_run允许您评估图表的一部分,将该评估保留为“暂停”并稍后完成。例如:

import tensorflow as tf

input_ = tf.placeholder(tf.float32)
result1 = some_expensive_operation(input_)
result2 = another_expensive_operation(result1)

with tf.Session() as sess:
x = ...
h = sess.partial_run_setup([result1, result2], [input_ ])
sess.partial_run(h, result1, feed_dict={input_: x})
sess.partial_run(h, result2)

与之前不同,这里 some_expense_operation 中的操作总共只会运行一次,因为 result2 的计算只是 result1 计算的延续.

这在多种情况下都很有用,例如,如果您想将运行的计算成本分成几个步骤,而且如果您需要在 TensorFlow 中进行一些中期评估检查,例如计算输入图的后半部分取决于前半部分的输出,或者根据中间结果决定是否完成评估(这些也可以在 TensorFlow 中实现,但可能存在您不希望的情况) )。

还要注意,这不仅仅是避免重复计算的问题。许多操作的状态在每次评估时都会发生变化,因此两次单独评估和一次评估分为两个部分评估的结果实际上可能不同。随机操作就是这种情况,每次运行都会获得一个新的不同值,以及其他有状态对象(例如迭代器)。变量显然也是有状态的,因此更改变量的操作(如 tf.Session.assign 或优化器)在运行一次和运行两次时不会产生相同的结果。

无论如何,请注意,从 v1.12.0 开始,partial_run 仍然是一个实验性功能,可能会发生变化。

关于session - 在Tensorflow中,Session.partial_run和Session.run有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53649371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com