什么是TensorFlow会话?
我已经看到了很多人对 TensorFlow 的 tf.Graph 和 tf.Session 的规则感到困惑。其实很简单:
- Graph(图形)定义了计算。但它不计算任何东西,也不包含任何值,它只是定义您在代码中指定的操作。
- Session(会话)允许执行图形或部分图形。它为此分配资源(在一台或多台机器上)并保存中间结果和变量的实际值。
我们来看一个例子。
定义 Graph(图形)
我们使用一个变量和三个操作定义一个 Graph(图形):variable
返回变量的当前值。initialize
将初始值42分配给该变量。assign
将新值13赋给该变量。
graph = tf.Graph() with graph.as_default(): variable = tf.Variable(42, name='foo') initialize = tf.global_variables_initializer() assign = variable.assign(13)
旁注:TensorFlow 为您创建一个默认图形,因此我们不需要上面代码的前两行。 如果你不手动指定Graph(图形)时, 默认的 Graph(图形)也是下面例子中的 Session(会话)使用的缺省值。
在 Session(会话)中运行计算
要运行三个定义的操作中的任何一个,我们需要为该 Graph(图形)创建一个Session(会话)。会话还将分配内存来存储变量的当前值。
with tf.Session(graph=graph) as sess: sess.run(initialize) sess.run(assign) print(sess.run(variable)) # Output: 13
如您所见,我们的变量值仅在一个会话中有效。如果我们尝试在第二个会话中查询该值,TensorFlow 将引发错误,因为该变量未在那里初始化。
with tf.Session(graph=graph) as sess: print(sess.run(variable)) # Error: Attempting to use uninitialized value foo
当然,我们可以在多个会话中使用该图,我们只需要再次初始化变量。新会话中的值将完全独立于第一个:
with tf.Session(graph=graph) as sess: sess.run(initialize) print(sess.run(variable)) # Output: 42
希望这个简短的工作可以帮助您更好地理解 tf.Session。随意在评论中提问。
更新(时间2017-07-12):在 TensorFlow 1.0中初始化变量的操作已更改。
您可以在开放的CC BY-SA 3.0 许可下使用此帖子, 并将其引用为:
@misc {hafner2016tfsession, 作者= {Hafner,Danijar}, title = {什么是TensorFlow会话?}, 年= {2016}, howpublished = {博客文章}, url = {https://danijar.com/what-is-a-tensorflow-session/} }
相关推荐
songbinxu 2020-07-19
louishao 2020-05-28
源式羽语 2020-08-09
Micusd 2020-11-19
xjtukuixing 2020-10-27
lybbb 2020-10-15
lybbb 2020-09-29
ghjk0 2020-09-24
yamaxifeng 2020-09-09
GDGYZL 2020-08-28
lybbb 2020-08-28
Icevivian 2020-08-25
comwayLi 2020-08-16
carbon0 2020-08-16
sherry颖 2020-08-01
sherry颖 2020-07-18
Niteowl 2020-07-15
Kindle君 2020-07-15
源式羽语 2020-07-04