TensorFlow
TensorFlow 是 Google 的开源 ML 框架,可在服务器、浏览器和手机上训练与部署模型,并以 Keras 作为其高级 API。
TensorFlow 是 Google 于 2015 年 11 月以 Apache 2.0 许可证发布的开源机器学习(ML)框架,最初由 Google Brain 团队为内部研究和产品开发。用于深度学习和其他数值计算的程序,会将计算表示为张量(多维数值数组)上的运算;TensorFlow 会自动对这些运算求导,将其编译为优化后的计算图,并在CPU、GPU和TPU上运行。它的生态覆盖从训练到模型部署的整个 MLOps流程:使用 Keras定义模型,使用 TensorBoard 跟踪实验,使用 TensorFlow Serving 在生产环境中进行模型服务,使用 TensorFlow.js 支持浏览器,以及使用 LiteRT(原名 TensorFlow Lite)支持运行边缘 AI的手机和嵌入式设备。Google 表示,随着 TensorFlow 2.21 于 2026 年 3 月发布,今后的 TensorFlow 工作将侧重于安全和错误修复、依赖项更新以及社区贡献,并建议新的生成式 AI 项目使用 Keras 3、JAX 或 PyTorch。
TensorFlow 的工作原理#
TensorFlow 1.x 要求用户先构建静态计算图,再在会话中执行。2019 年发布的 TensorFlow 2.0 将急切执行设为默认方式,因此运算会像普通 Python 代码一样立即运行,同时保留计算图作为优化手段:使用 tf.function修饰的函数会针对每种输入签名追踪一次并生成计算图,TensorFlow 可以优化该图、使用 XLA编译器编译该图,并以 SavedModel 格式保存该图,以便无需 Python 即可部署。tf.GradientTape 会记录一次前向传播的运算,让 TensorFlow 能够为反向传播和梯度下降计算梯度。下面的代码会执行这两项操作:
import tensorflow as tf
w = tf.Variable([[1.0], [-2.0]])
x = tf.constant([[3.0, 4.0]])
@tf.function # trace the Python function into a TensorFlow graph on the first call
def loss_fn(x):
print("Tracing") # Python code runs only while tracing, not on every call
return tf.reduce_sum((x @ w) ** 2)
# Record operations on a tape to compute the gradient of the loss with respect to w
with tf.GradientTape() as tape:
loss = loss_fn(x)
gradient = tape.gradient(loss, w)
loss_fn(x) # same input shape and dtype: reuses the traced graph without printing
print(f"loss {loss.numpy()}, gradient {gradient.numpy().ravel()}")它会打印一次 Tracing,然后打印 loss 25.0, gradient [-30. -40.]:第二次调用运行的是缓存的计算图,没有执行 Python 函数体;(3w₁ + 4w₂)² 在 w = (1, -2) 处的梯度为 2 × (-5) × (3, 4)。进行分布式训练时,tf.distribute策略会在多个 GPU、TPU 切片或机器上复制模型。
TensorFlow 生态#
- Keras: 用于定义层和模型,并使用
fit训练模型的高级 API。从 TensorFlow 2.16 起,安装 TensorFlow 时会一并安装 Keras 3;Keras 3 也能在 JAX 和 PyTorch 上运行。 - TensorBoard: 用于在训练期间查看损失曲线、指标、直方图和模型计算图的仪表板。它也能读取其他框架写入的日志,而 TensorFlow 2.21 不再将其作为依赖项安装。
- TensorFlow Serving: 一种服务系统,可加载 SavedModel 并通过 gRPC 或 REST 响应预测请求,还支持版本管理以便热切换模型。
- TFX: 用于生产环境机器学习的流水线框架,可依次完成数据验证、训练、评估,并将获批模型推送到服务系统。
- TensorFlow.js: 在浏览器和 Node.js 中运行并训练模型,因此推理可以在用户设备上完成,无需将数据发送到服务器。
- LiteRT: Google 面向 Android、iOS、嵌入式 Linux 和微控制器的设备端运行时,于 2024 年 9 月由 TensorFlow Lite 更名而来。它可以运行由 TensorFlow、PyTorch 或 JAX 转换而来的
.tflite模型,并支持移动 GPU 和 NPU 加速。
TensorFlow、PyTorch 和 JAX 对比#
- PyTorch 与 TensorFlow 对比: PyTorch 从一开始就以急切执行为先,
torch.compile则加入了计算图编译。它是大多数新研究代码和开放权重模型的默认框架,而 TensorFlow 的优势在于其成熟的服务器、浏览器和移动设备部署技术栈。 - JAX: Google 的 NumPy 风格库,提供可组合的转换:使用
grad计算导数,使用jit进行 XLA 编译,使用vmap实现向量化。Google 使用 JAX 训练 Gemini 模型。 - Keras: 一种高级 API,而非独立的引擎。Keras 3 代码可在 TensorFlow、JAX 或 PyTorch 上运行,因此模型定义不会将项目绑定到某个框架。
为 TensorFlow 运行时转换模型#
在其他框架中训练的模型可以通过转换器接入 TensorFlow 的部署工具:onnx2tf会将 ONNX计算图重建为 TensorFlow SavedModel,jax2tf会将 JAX 函数封装为 TensorFlow 函数,而 Google 的 LiteRT Torch 转换器可直接从 PyTorch 生成 LiteRT 模型。Ultralytics YOLO 模型使用 PyTorch 编写,其导出模式会通过这些路径处理 YOLO26:format="saved_model"会导出 ONNX,并使用 onnx2tf 将其转换为适用于 TensorFlow Serving 的 SavedModel;format="edgetpu"会为 Coral Edge TPU编译 INT8模型;format="litert"则使用 LiteRT Torch,因此无需安装 TensorFlow。以下代码会执行 SavedModel 导出:
from ultralytics import YOLO
# Load the smallest YOLO26 detection model
model = YOLO("yolo26n.pt")
# Convert through ONNX to a TensorFlow SavedModel directory
path = model.export(format="saved_model")
print(f"SavedModel: {path}")导出过程会写入一个 yolo26n_saved_model 文件夹,Python 可以通过 tf.saved_model.load 加载该文件夹,Ultralytics YOLO 本身也可以通过 YOLO("yolo26n_saved_model") 运行其中的模型。










