
TensorFlow 的名字来源于其处理数据的核心结构 - 张量Tensor和计算流程Flow。TensorFlow 是一个端到端的开源机器学习平台它的核心优势在于灵活的计算图模型支持动态图和静态图两种模式跨平台部署能力可在 CPU、GPU、TPU 和移动设备上运行丰富的生态系统包含 TensorFlow Lite移动端、TensorFlow.js浏览器端等子项目生产就绪提供从研究到生产的完整工具链核心概念解析张量Tensor张量是 TensorFlow 中最基本的数据结构可以理解为多维数组的泛化概念。从数学角度来说张量是一个可以用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数。简单类比标量0维张量一个数字如5向量1维张量一列数字如[1, 2, 3, 4]矩阵2维张量数字的表格如[[1, 2], [3, 4]]3维张量数字的立方体如彩色图像高×宽×颜色通道更高维张量例如视频数据时间×高×宽×颜色通道张量的关键属性实例# 示例张量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}) # int32print(f维度 (Rank): {tf.rank(tensor)}) # 2print(f设备 (Device): {tensor.device}) # /job:localhost/replica:0/task:0/device:CPU:0关键属性解释形状Shape描述每个维度的大小(2, 3)表示 2 行 3 列的矩阵(224, 224, 3)表示 224×224 像素的 RGB 图像数据类型Dtype张量中数据的类型tf.float3232位浮点数最常用tf.int3232位整数tf.bool布尔值tf.string字符串维度/秩Rank张量的维数标量秩为 0向量秩为 1矩阵秩为 2设备Device张量存储的设备位置CPU/device:CPU:0GPU/device:GPU:0张量在机器学习中的意义数据表示输入数据图像、文本、音频都可以表示为张量模型参数权重和偏置都是张量中间结果计算过程中的所有数据都是张量输出结果预测结果、损失值等实际例子图像分类输入张量形状(batch_size, height, width, channels)文本处理输入张量形状(batch_size, sequence_length)时间序列输入张量形状(batch_size, time_steps, features)计算图Computational Graph计算图是一种用节点和边来表示数学运算的图结构节点Node代表数学运算加法、乘法、激活函数等边Edge代表数据流动的路径张量简单例子计算 z (x y) * w 的计算图 x ──┐ ├─→ [] ──→ [×] ──→ z y ──┘ ├ w ────────────┘计算图的优势1. 自动微分可以自动计算梯度实现反向传播不需要手动推导复杂的梯度公式2. 优化机会编译时优化合并运算、消除冗余运行时优化内存复用、并行计算3. 可视化调试使用 TensorBoard 可视化模型结构便于理解和调试复杂模型4. 分布式计算可以将图的不同部分分配到不同设备支持跨机器的分布式训练静态图 vs 动态图TensorFlow 1.x静态图实例# TensorFlow 1.x 风格仅作理解不推荐使用import tensorflow.compat.v1 as tftf.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})TensorFlow 2.x动态图/即时执行实例# 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) bprint(y) # 立即得到结果会话Session与即时执行Eager ExecutionTensorFlow 1.x 的会话机制在 TensorFlow 1.x 中计算图的构建和执行是分离的两阶段过程构建阶段定义计算图但不执行任何计算执行阶段在会话中运行图获得结果会话的作用管理图的执行环境分配和管理资源内存、设备提供图执行的上下文3.2 TensorFlow 2.x 的即时执行TensorFlow 2.x 默认启用即时执行让 TensorFlow 变得更加 Pythonic即时执行的特点立即求值运算定义后立即执行易于调试可以使用 Python 调试工具直观编程像写普通 Python 代码一样对比示例实例# TensorFlow 2.x - 即时执行import tensorflow as tfa tf.constant(2.0)b tf.constant(3.0)c a bprint(f结果: {c}) # 结果: 5.0# 可以直接访问值print(fc 的 numpy 值: {c.numpy()}) # c 的 numpy 值: 5.0图模式 vs 即时执行模式即时执行模式默认适合开发调试运算立即执行易于调试和理解性能略低图模式适合生产部署预先构建完整计算图更好的优化机会更高的执行效率切换到图模式实例tf.functiondef compute_function(x, y):return x * y x# 这个函数会被编译成图result compute_function(tf.constant(2.0), tf.constant(3.0))变量Variable和常量Constant常量Constant常量是不可变的张量一旦创建就不能修改实例# 创建常量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(), dtypefloat32)常量的用途存储超参数学习率、批大小等存储不需要训练的配置数据作为计算中的固定值变量Variable变量是可变的张量通常用来存储模型参数实例# 创建变量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})变量的关键特性状态保持在训练过程中保持状态梯度跟踪可以计算相对于变量的梯度可优化可以被优化算法更新可保存可以保存到检查点文件变量 vs 常量的使用场景特性变量Variable常量Constant可变性可修改不可修改主要用途模型参数权重、偏置超参数、输入数据梯度计算支持不支持内存占用持久存储临时存储典型例子W tf.Variable(...)learning_rate tf.constant(0.01)数据流动和自动微分前向传播数据在计算图中从输入节点流向输出节点的过程实例# 简单的前向传播示例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})自动微分Automatic DifferentiationTensorFlow 使用GradientTape来记录运算并自动计算梯度实例# 自动微分示例x tf.Variable(3.0)# 使用 GradientTape 记录运算with tf.GradientTape() as tape:y x**2 2*x 1 # y x² 2x 1# 计算 dy/dxgradient tape.gradient(y, x)print(f当 x3 时dy/dx {gradient}) # 应该是 2x 2 8GradientTape 的工作原理记录运算tape 记录所有在其上下文中的运算构建反向图创建用于梯度计算的反向计算图计算梯度使用链式法则计算梯度训练循环中的概念整合实例# 完整的训练步骤示例import tensorflow as tf# 模型和数据model tf.keras.Sequential([tf.keras.layers.Dense(10, activationrelu),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.functiondef 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(fEpoch {epoch}: Loss {loss:.4f})核心概念总结概念关系图TensorFlow 核心概念关系输入数据 (Tensor) ──→ 计算图 (Graph) ──→ 输出结果 (Tensor) ↑ ↓ 常量/变量 前向传播 ↑ ↓ 参数存储 ←──── 梯度更新 ←──── 自动微分 ↑ GradientTape