TensorFlow计算图核心机制:从构建到会话执行详解

宋时安
宋时安
发布时间:2026-10-12 | 1人浏览过
原创

本文深入解析TensorFlow的核心机制,涵盖计算图的构建与执行流程。详细阐述如何通过Context Manager建立Graph,利用Session启动Op并分发至硬件设备。重点讲解Fetches参数在run()中的应用,以及Variable状态管理、初始化方法及与Optimizer的交互,帮助开发者掌握模型训练的基础架构。

计算图

在 TensorFlow 框架中,计算任务通过计算图进行建模。计算图本质上是一种有向图结构,用于定义计算的逻辑关系,它实际上是由一系列函数组合而成的运算网络。借助这种图形化的表示方式,用户能够利用简单且直观的数学函数组件,构建出复杂的运算逻辑。

在 TensorFlow 中使用计算图主要包含两个步骤:首先是建立计算图,其次是执行该图。

从形式上看,计算图由节点(Nodes)和边(Edges)两部分组成。节点以圆圈表示,代表对数据执行的具体计算或操作(Operation);边以箭头表示,用于在操作之间传递实际的数据值(Tensor)。

建立图

graph = tf.Graph()

访问上下文管理器

with graph.as_default(): 

使用 with 语句可以调用上下文管理器(context manager),以此告知 TensorFlow 当前正在向特定的 Graph 添加操作(Op)。

计算图的执行必须在会话(Session)中启动。会话负责将图中的操作分发到 CPU 或 GPU 等硬件设备上,并提供执行这些操作的方法。执行完成后,会话会将产生的张量(tensor)返回给用户。

## 开启session

sess = tf.Session()`

一旦会话(Session)被开启,即可通过调用 run() 方法来计算所需 Tensor 的值。

使用完会话后,务必记得关闭它以释放资源。

sess.close()

Fetches

fetches 是 session.run() 方法的一个参数,它可以接收任何需要执行的 Op 或 Tensor,以及它们组成的列表结构。

  • 如果传入的是 tensor,那么 session.run() 的输出将是一个 Numpy 数组。
  • 如果传入的是 Op,那么 session.run() 的输出通常为 None。

例如:sess.run(b) 会指示 Session 找到计算 b 所需的所有节点,按顺序执行并输出结果。

全局变量初始化

tf.global_variables_initializer()

该操作表示将所有定义的 Variable 变量准备就绪,以便后续使用。此 Op 也可以传递给 session.run() 执行。例如:

init = tf.global_variables_initializer()
…
sess.run(init)

张量Tensor和OP

在 TensorFlow 中,使用 tensor 来表示所有数据结构,计算图中操作(Op)节点之间传递的均为 Tensor。

  • 定义 tensor 时可以直接使用 numpy 传递给 Op 节点,因为 TensorFlow 的 Op 能够将 Python 的数据类型转化为 tensor,包括 numbers、booleans、strings 或者 list。
  • 图中的任何节点都称为 Operation,简称 Op。
  • 每个 Op 的输出会被传递到其他 Op 或者 sess.run()。

Variable

Variable(变量)用于维护图执行过程中的状态信息,需要它来保持和更新参数数值,这些数值是需要动态调整的。

  • Tensor 和 Operation 都是一成不变的,而 Variable 是可以随着时间改变的。
  • Variable 可以用在任何使用 tensor 的 Op 中,它当前的值就会被传递给使用它的 Op。
  • Variable 通常的初始值是一些很大的 0、1 或者随机值 tensor,或者内置 op:tf.zeros(),tf.ones() 等。
  • Variable 在 graph 中,状态由 session 管理,也是在 session 中进行初始化,session 可以追踪 variable 的当前值是多少。
  • session 可以只初始化一部分 variable。
  • 使用 tf.variables_initializer,传入初始化变量列表。
  • variable 的值是可以被改变的。
  • 比如使用 variable.assign(variable),或者variable.assign_add(1)。
  • 每个 session 维护独立的 variable 变量值,同一个 variable 不同的 session 值可以是不同的。
  • 当各种 Optimizer 优化器训练机器学习模型时,variable 就会随之改变,当使用 variable 中的 trainable=False 属性可以不被 Optimizer 改变。

name_scopes

  • name_sopes 可以用来管理图,可以把一组 Op 放到一个组块中。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表