什么是TensorFlow会话?

本文深入解析了TensorFlow中tf.Graph和tf.Session的作用与用法。Graph定义计算流程,但不执行计算,Session则负责执行Graph,分配资源并保存变量实际值。通过实例演示了变量在不同Session间的独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我已经看到了很多人对 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/}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值