《深入理解TensorFlow:张量、计算图、会话/即时执行与自动微分核心原理全解》

本篇技术博文摘要 🌟

  • 主体内容以逻辑清晰的模块展开:首先详解张量这一基本数据结构,阐明其多维数组本质、关键属性及其在机器学习中表示各类数据的作用。
  • 随后,深入阐述计算图的声明式编程范式,通过实例说明其实现自动微分、优化、可视化与分布式计算的优势。
  • 文章进而对比了TensorFlow 1.x的静态图与会话机制2.x默认的即时执行模式,解释了两者的工作流程、特点与适用场景。
  • 此外,文章辨析了可训练的变量 与不可变的常量 ,并阐述了前向传播、自动微分 (借助GradientTape)在训练循环中的协同工作。
  • 文末通过核心概念总结与关系图,帮助读者融会贯通,构建扎实的知识体系。

引言 📘

  • 在这个变幻莫测、快速发展的技术时代,与时俱进是每个IT工程师的必修课。
  • 我是盛透侧视攻城狮,一名什么都会一丢丢的网络安全工程师,也是众多技术社区的活跃成员以及多家大厂官方认可人员,希望能够与各位在此共同成长。

上节回顾

目录

[本篇技术博文摘要 🌟](#本篇技术博文摘要 🌟)

[引言 📘](#引言 📘)

上节回顾

[1.TensorFlow 核心概念](#1.TensorFlow 核心概念)

2.核心概念解析

2.1张量(Tensor)

2.2简单类比:

2.3张量的关键属性及示例

2.3.1关键属性解释:

3.张量在机器学习中的意义

3.1数据表示:

3.2实际例子:

[4.计算图(Computational Graph)](#4.计算图(Computational Graph))

4.1简单例子:

5.计算图的优势

5.1自动微分:

5.2优化机会:

5.3可视化调试:

5.4分布式计算:

[6.静态图 vs 动态图](#6.静态图 vs 动态图)

[6.1TensorFlow 1.x(静态图)及示例](#6.1TensorFlow 1.x(静态图)及示例)

[6.2TensorFlow 2.x(动态图/即时执行)及示例](#6.2TensorFlow 2.x(动态图/即时执行)及示例)

[7.会话(Session)与即时执行(Eager Execution)](#7.会话(Session)与即时执行(Eager Execution))

[7.1TensorFlow 1.x 的会话机制](#7.1TensorFlow 1.x 的会话机制)

7.1.1两阶段过程:

7.1.2会话的作用:

[7.2 TensorFlow 2.x 的即时执行](#7.2 TensorFlow 2.x 的即时执行)

7.2.1即时执行的特点

[7.3会话(Session)与即时执行(Eager Execution)对比示例](#7.3会话(Session)与即时执行(Eager Execution)对比示例)

[8.图模式 vs 即时执行模式](#8.图模式 vs 即时执行模式)

8.1即时执行模式(默认,适合开发调试)

8.2图模式(适合生产部署

8.3切换到图模式及示例

9.变量(Variable)和常量(Constant)

9.1创建常量及示例(Constant)

9.1.1常量的用途

9.2创建/修改/部分更新变量(Variable)

9.2.1变量的关键特性

[9.3变量 vs 常量的使用场景](#9.3变量 vs 常量的使用场景)

10.数据流动和自动微分

10.1前向传播及示例

[10.2自动微分及示例(Automatic Differentiation)](#10.2自动微分及示例(Automatic Differentiation))

[10.2.1GradientTape 的工作原理](#10.2.1GradientTape 的工作原理)

10.3训练循环中的概念代码整合

11.核心概念总结

11.1概念关系图

欢迎各位彦祖与热巴畅游本人专栏与技术博客

你的三连是我最大的动力

点击➡️指向的专栏名即可闪现


1.TensorFlow 核心概念

  • TensorFlow 的名字来源于其处理数据的核心结构 - 张量(Tensor)和计算流程(Flow)。

  • TensorFlow 是一个端到端的开源机器学习平台,它的核心优势在于:

    • 灵活的计算图模型:支持动态图和静态图两种模式
    • 跨平台部署能力:可在 CPU、GPU、TPU 和移动设备上运行
    • 丰富的生态系统:包含 TensorFlow Lite(移动端)、TensorFlow.js(浏览器端)等子项目
    • 生产就绪:提供从研究到生产的完整工具链

2.核心概念解析

2.1张量(Tensor)

  • 张量是 TensorFlow 中最基本的数据结构,可以理解为多维数组的泛化概念。

  • 从数学角度来说,张量是一个可以用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数。

2.2简单类比

  • 标量(0维张量) :一个数字,如 5
  • 向量(1维张量) :一列数字,如 [1, 2, 3, 4]
  • 矩阵(2维张量) :数字的表格,如 [[1, 2], [3, 4]]
  • 3维张量:数字的立方体,如彩色图像(高×宽×颜色通道)
  • 更高维张量:例如视频数据(时间×高×宽×颜色通道)

2.3张量的关键属性及示例

python 复制代码
# 示例张量
import tensorflow as tf

# 创建一个 2x3 的矩阵张量
tensor = tf.constant([[1, 2, 3], [4, 5, 6]])

print(f"形状 (Shape): {tensor.shape}")        # (2, 3)
print(f"数据类型 (Dtype): {tensor.dtype}")    # int32
print(f"维度 (Rank): {tf.rank(tensor)}")      # 2 
print(f"设备 (Device): {tensor.device}")      # /job:localhost/replica:0/task:0/device:CPU:0

2.3.1关键属性解释

  • 形状(Shape) :描述每个维度的大小
    • (2, 3) 表示 2 行 3 列的矩阵
    • (224, 224, 3) 表示 224×224 像素的 RGB 图像
  • 数据类型(Dtype) :张量中数据的类型
    • tf.float32:32位浮点数(最常用)
    • tf.int32:32位整数
    • tf.bool:布尔值
    • tf.string:字符串
  • 维度/秩(Rank) :张量的维数
    • 标量:秩为 0
    • 向量:秩为 1
    • 矩阵:秩为 2
  • 设备(Device) :张量存储的设备位置
    • CPU:/device:CPU:0
    • GPU:/device:GPU:0

3.张量在机器学习中的意义

3.1数据表示

  • 输入数据:图像、文本、音频都可以表示为张量
  • 模型参数:权重和偏置都是张量
  • 中间结果:计算过程中的所有数据都是张量
  • 输出结果:预测结果、损失值等

3.2实际例子

  • 图像分类 :输入张量形状 (batch_size, height, width, channels)
  • 文本处理 :输入张量形状 (batch_size, sequence_length)
  • 时间序列 :输入张量形状 (batch_size, time_steps, features)

4.计算图(Computational Graph)

  • 计算图是一种用节点 来表示数学运算的图结构:
    • 节点(Node):代表数学运算(加法、乘法、激活函数等)
    • 边(Edge):代表数据流动的路径(张量)

4.1简单例子

bash 复制代码
计算 z = (x + y) * w 的计算图:

x ──┐
    ├─→ [+] ──→ [×] ──→ z
y ──┘         ├
w ────────────┘

5.计算图的优势

5.1自动微分

  • 可以自动计算梯度,实现反向传播
  • 不需要手动推导复杂的梯度公式

5.2优化机会

  • 编译时优化:合并运算、消除冗余
  • 运行时优化:内存复用、并行计算

5.3可视化调试

  • 使用 TensorBoard 可视化模型结构
  • 便于理解和调试复杂模型

5.4分布式计算

  • 可以将图的不同部分分配到不同设备
  • 支持跨机器的分布式训练

6.静态图 vs 动态图

6.1TensorFlow 1.x(静态图)及示例

python 复制代码
# TensorFlow 1.x 风格(仅作理解,不推荐使用)
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

# 定义计算图
x = tf.placeholder(tf.float32, shape=[None, 784])
W = tf.Variable(tf.random.normal([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.matmul(x, W) + b

# 创建会话并执行
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    result = sess.run(y, feed_dict={x: input_data})

6.2TensorFlow 2.x(动态图/即时执行)及示例

python 复制代码
# TensorFlow 2.x 风格(推荐)
import tensorflow as tf

# 直接执行运算
x = tf.constant([[1.0, 2.0, 3.0]])
W = tf.Variable(tf.random.normal([3, 2]))
b = tf.Variable(tf.zeros([2]))
y = tf.matmul(x, W) + b

print(y)  # 立即得到结果

7.会话(Session)与即时执行(Eager Execution)

7.1TensorFlow 1.x 的会话机制

  • 在 TensorFlow 1.x 中,计算图的构建和执行是分离的

7.1.1两阶段过程

  • 构建阶段:定义计算图,但不执行任何计算
  • 执行阶段:在会话中运行图,获得结果

7.1.2会话的作用

  • 管理图的执行环境
  • 分配和管理资源(内存、设备)
  • 提供图执行的上下文

7.2 TensorFlow 2.x 的即时执行

  • TensorFlow 2.x 默认启用即时执行,让 TensorFlow 变得更加 "Pythonic":

7.2.1即时执行的特点

  • 立即求值:运算定义后立即执行
  • 易于调试:可以使用 Python 调试工具
  • 直观编程:像写普通 Python 代码一样

7.3会话(Session)与即时执行(Eager Execution)对比示例

python 复制代码
# TensorFlow 2.x - 即时执行
import tensorflow as tf

a = tf.constant(2.0)
b = tf.constant(3.0)
c = a + b
print(f"结果: {c}")  # 结果: 5.0

# 可以直接访问值
print(f"c 的 numpy 值: {c.numpy()}")  # c 的 numpy 值: 5.0

8.图模式 vs 即时执行模式

8.1即时执行模式(默认,适合开发调试)

  • 运算立即执行
  • 易于调试和理解
  • 性能略低

8.2图模式(适合生产部署

  • 预先构建完整计算图
  • 更好的优化机会
  • 更高的执行效率

8.3切换到图模式及示例

python 复制代码
@tf.function
def compute_function(x, y):
    return x * y + x

# 这个函数会被编译成图
result = compute_function(tf.constant(2.0), tf.constant(3.0))

9.变量(Variable)和常量(Constant)

9.1创建常量及示例(Constant)

  • 常量是不可变的张量,一旦创建就不能修改
python 复制代码
# 创建常量
scalar_const = tf.constant(3.14)
vector_const = tf.constant([1, 2, 3, 4])
matrix_const = tf.constant([[1, 2], [3, 4]])

# 常量的值不能改变
print(scalar_const)  # tf.Tensor(3.14, shape=(), dtype=float32)

9.1.1常量的用途

  • 存储超参数(学习率、批大小等)
  • 存储不需要训练的配置数据
  • 作为计算中的固定值

9.2创建/修改/部分更新变量(Variable)

  • 变量是可变的张量,通常用来存储模型参数
python 复制代码
# 创建变量
weight = tf.Variable(tf.random.normal([2, 3]))
bias = tf.Variable(tf.zeros([3]))

print(f"初始权重:\n{weight}")

# 修改变量的值
weight.assign(tf.ones([2, 3]))
print(f"修改后权重:\n{weight}")

# 部分更新
weight[0, 0].assign(5.0)
print(f"部分更新后:\n{weight}")

9.2.1变量的关键特性

  1. 状态保持:在训练过程中保持状态
  2. 梯度跟踪:可以计算相对于变量的梯度
  3. 可优化:可以被优化算法更新
  4. 可保存:可以保存到检查点文件

9.3变量 vs 常量的使用场景

特性 变量(Variable) 常量(Constant)
可变性 可修改 不可修改
主要用途 模型参数(权重、偏置) 超参数、输入数据
梯度计算 支持 不支持
内存占用 持久存储 临时存储
典型例子 W = tf.Variable(...) learning_rate = tf.constant(0.01)

10.数据流动和自动微分

10.1前向传播及示例

  • 数据在计算图中从输入节点流向输出节点的过程
python 复制代码
# 简单的前向传播示例
import tensorflow as tf

# 输入数据
x = tf.constant([[1.0, 2.0]])

# 模型参数
W1 = tf.Variable(tf.random.normal([2, 3]))
b1 = tf.Variable(tf.zeros([3]))
W2 = tf.Variable(tf.random.normal([3, 1]))
b2 = tf.Variable(tf.zeros([1]))

# 前向传播
hidden = tf.nn.relu(tf.matmul(x, W1) + b1)  # 隐层
output = tf.matmul(hidden, W2) + b2         # 输出层

print(f"最终输出: {output}")

10.2自动微分及示例(Automatic Differentiation)

  • TensorFlow 使用 GradientTape 来记录运算并自动计算梯度
python 复制代码
# 自动微分示例
x = tf.Variable(3.0)

# 使用 GradientTape 记录运算
with tf.GradientTape() as tape:
    y = x**2 + 2*x + 1  # y = x² + 2x + 1

# 计算 dy/dx
gradient = tape.gradient(y, x)
print(f"当 x=3 时,dy/dx = {gradient}")  # 应该是 2x + 2 = 8

10.2.1GradientTape 的工作原理

  • 记录运算:tape 记录所有在其上下文中的运算
  • 构建反向图:创建用于梯度计算的反向计算图
  • 计算梯度:使用链式法则计算梯度

10.3训练循环中的概念代码整合

python 复制代码
# 完整的训练步骤示例
import tensorflow as tf

# 模型和数据
model = tf.keras.Sequential([
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(1)
])

x_train = tf.random.normal([100, 5])
y_train = tf.random.normal([100, 1])

optimizer = tf.keras.optimizers.Adam(0.01)

# 训练步骤
@tf.function
def train_step(x, y):
    with tf.GradientTape() as tape:
        predictions = model(x)
        loss = tf.keras.losses.mse(y, predictions)
    
    gradients = tape.gradient(loss, model.trainable_variables)
    optimizer.apply_gradients(zip(gradients, model.trainable_variables))
    return loss

# 执行训练
for epoch in range(10):
    loss = train_step(x_train, y_train)
    print(f"Epoch {epoch}: Loss = {loss:.4f}")

11.核心概念总结

11.1概念关系图

  • TensorFlow 核心概念关系:
bash 复制代码
输入数据 (Tensor) ──→ 计算图 (Graph) ──→ 输出结果 (Tensor)
      ↑                    ↓
   常量/变量            前向传播
      ↑                    ↓
   参数存储 ←──── 梯度更新 ←──── 自动微分
                              ↑
                        GradientTape

欢迎各位彦祖与热巴畅游本人专栏与技术博客

你的三连是我最大的动力

点击➡️指向的专栏名即可闪现

➡️计算机组成原理****
➡️操作系统
➡️****渗透终极之红队攻击行动********
➡️ 动画可视化数据结构与算法
➡️ 永恒之心蓝队联纵合横防御
➡️****华为高级网络工程师********
➡️****华为高级防火墙防御集成部署********
➡️ 未授权访问漏洞横向渗透利用
➡️****逆向软件破解工程********
➡️****MYSQL REDIS 进阶实操********
➡️****红帽高级工程师
➡️
红帽系统管理员********
➡️****HVV 全国各地面试题汇总********

相关推荐
九.九6 小时前
ops-transformer:AI 处理器上的高性能 Transformer 算子库
人工智能·深度学习·transformer
春日见6 小时前
拉取与合并:如何让个人分支既包含你昨天的修改,也包含 develop 最新更新
大数据·人工智能·深度学习·elasticsearch·搜索引擎
偷吃的耗子7 小时前
【CNN算法理解】:三、AlexNet 训练模块(附代码)
深度学习·算法·cnn
Faker66363aaa8 小时前
【深度学习】YOLO11-BiFPN多肉植物检测分类模型,从0到1实现植物识别系统,附完整代码与教程_1
人工智能·深度学习·分类
大江东去浪淘尽千古风流人物11 小时前
【SLAM】Hydra-Foundations 层次化空间感知:机器人如何像人类一样理解3D环境
深度学习·算法·3d·机器人·概率论·slam
小刘的大模型笔记11 小时前
大模型微调参数设置 —— 从入门到精通的调参指南
人工智能·深度学习·机器学习
LaughingZhu11 小时前
Product Hunt 每日热榜 | 2026-02-10
人工智能·经验分享·深度学习·神经网络·产品运营
千里马也想飞12 小时前
公共管理新题解:信息化条件下文化治理类论文,如何用AI把“大空题目”做成“落地案例库”?(附三级提纲+指令包)
人工智能·深度学习·机器学习·论文笔记
软件算法开发12 小时前
基于鲸鱼优化的LSTM深度学习网络模型(WOA-LSTM)的一维时间序列预测算法matlab仿真
深度学习·lstm·鲸鱼优化·一维时间序列预测·woa-lstm
技术传感器12 小时前
大模型从0到精通:对齐之心 —— 人类如何教会AI“好“与“坏“ | RLHF深度解析
人工智能·深度学习·神经网络·架构