python - 创建两个 TensorFlow 会话时是否会创建多个图实例化?
问题描述
背景
我正在通过使用 Scikit-Learn 和 TensorFlow 进行动手机器学习的第二部分来学习 TensorFlow ,其中一个练习题是(我自己添加的粗体文本以增加问题的清晰度):
“如果您创建一个g
包含变量的图形w
,然后启动两个线程并在每个线程中打开一个会话,两者都使用相同的图形g
,每个会话将拥有自己的变量副本w
还是共享?”
书后提供的答案如下:
“在本地 TensorFlow 中,会话管理变量值,因此如果您创建一个g
包含变量的图w
,然后启动两个线程并在每个线程中打开一个本地会话,两者都使用相同的图g
,那么每个会话将拥有自己的变量副本w
。 ..”
我的问题
A)或B)是对正在发生的事情的正确解释吗?
一)。两个会话都使用同一个graph实例g
,并且两个单独的变量仅是由于两个单独的会话所致。
B)通过两个不同会话的实例化,两个线程使用相同的图架构g
,但创建了两个独立的图实例化g
,导致两个不同的变量。
解决方案
我认为这里的问题是“实例化”一词的歧义,以及图形和会话实际上是什么。
如果您有一个图表和两个打开的会话,则只有一个图表实例。这是一个 Python 对象,描述了模型执行的计算,即张量之间的操作,可能包括一些常量值和变量。如果您向该图添加新元素(新操作),则两个会话都可以访问它。重要的是要理解图是静态的,也就是说,它们没有状态,它们不计算任何东西,它们只是描述如何执行计算。它可以被认为是计算机程序源代码的模拟。
会话是一个对象,它存储可以在其上执行计算的图的状态。最重要的是,这个“状态”包含图中变量的值。因此,变量对象本身是图形的一部分(从这个意义上说,跨会话“共享”),但它在任何时候拥有的值都存储在每个打开的会话中。但是,变量值并不是存储在会话中的唯一内容。您还拥有诸如随机数生成器或数据集迭代器的状态之类的信息。请参阅什么是 tensorflow 中的“有状态对象”?. 按照之前的类比,会话类似于执行程序所使用的内存和 CPU,而图形是其源代码。
试图更具体地回答您的问题,我认为,如果我正确理解您的意思,正确的解释是A) 。
推荐阅读
- arrays - 如何在 TCL 中查找数组的行列数
- java - 有人可以解释最后的退货声明吗?
- ios - 在 swiftui 中使用多维字典进行导航
- vapor - 蒸气 4 流畅。复杂查询、过滤和创建(如果不存在)
- reactjs - 为什么我会收到此“对象作为 React 子项无效”错误?
- python - 在 Python/Pandas 中将 dtype 'object' 的所有列转换为 'float'
- javascript - 使用 array.reduce 计算数组中的匹配项
- java - 尝试调用显示该方法并返回输入值的方法
- android - 无法使用 socket.io 从 Android 客户端连接到 node.js 服务器
- python - 我在浏览器中看不到我的 elasticbeanstalk 应用程序