TensorFlow 是由 Google 开发的开源机器学习框架,广泛用于深度学习、数值计算和数据处理。其核心基于数据流图(节点表示操作,边表示多维数据数组“张量”),支持灵活部署(CPU/GPU/TPU、移动设备、浏览器等)。
一、TensorFlow 核心特性
- 灵活性与可扩展性
- 支持从线性回归到复杂神经网络模型的构建。
- 提供低级 API(如张量操作)和高级 API(如 Keras)。
- 跨平台支持
- 可在本地机器、云端、浏览器(TensorFlow.js)、移动端(TensorFlow Lite)运行。
- 即时执行模式(Eager Execution)
- TensorFlow 2.x 默认启用 Eager Execution,无需构建静态计算图即可逐行执行代码。
- 分布式训练
- 支持多 GPU 和 TPU 并行训练,适用于大规模数据集和模型。
- 丰富的生态系统
- 包含 TensorFlow Extended (TFX)、TensorBoard(可视化工具)、TensorFlow Hub(预训练模型库)等。
二、安装 TensorFlow
使用 pip
安装 CPU 或 GPU 版本:
# CPU 版本
pip install tensorflow
# GPU 版本(需 NVIDIA 驱动和 CUDA 支持)
pip install tensorflow-gpu
安装过程界面如下:
安装完成的界面如下:
验证安装:
import tensorflow as tf
print("TensorFlow 版本:", tf.__version__) # 输出示例:2.19.0
三、基础概念与组件
- 张量(Tensor)
a = tf.constant([[1, 2], [3, 4]]) # 2x2 张量
b = tf.constant([[5, 6], [7, 8]])
c = tf.matmul(a, b) # 矩阵乘法
print(c) # 输出:tf.Tensor([[19 22],[43 50]], shape=(2,2), dtype=int32)
- 多维数组,是 TensorFlow 的基本数据单位。
- 变量(Variable)
weights = tf.Variable(tf.random.normal([5, 10])) # 5x10 随机初始化变量
- 用于存储模型参数(如神经网络的权重)。
- 自动微分(GradientTape)
x = tf.Variable(3.0)
with tf.GradientTape() as tape:
y = x**2
dy_dx = tape.gradient(y, x) # dy/dx = 2x = 6.0
- 记录计算过程以实现自动求导。
- Keras API
model = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
- 高级 API,简化模型构建与训练。
四、使用示例
示例 1:线性回归
import tensorflow as tf
import numpy as np
# 生成模拟数据
X = np.linspace(0, 10, 100).reshape(-1, 1)
y = 3 * X + 5 + np.random.randn(100, 1) * 2
# 构建模型
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,))
])
# 编译模型
model.compile(optimizer='sgd', loss='mse')
# 训练模型
model.fit(X, y, epochs=100, verbose=0)
# 查看参数
print("斜率:", model.layers[0].weights[0].numpy()) # 接近 3
print("截距:", model.layers[0].weights[1].numpy()) # 接近 5
示例 2:MNIST 手写数字分类
# 加载数据
mnist = tf.keras.datasets.mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train, X_test = X_train / 255.0, X_test / 255.0 # 归一化
# 构建模型
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 训练与评估
model.fit(X_train, y_train, epochs=5)
model.evaluate(X_test, y_test, verbose=2) # 测试准确率约 98%
示例 3:自定义训练循环(低级 API)
# 自定义模型与训练步骤
class CustomModel(tf.keras.Model):
def __init__(self):
super().__init__()
self.dense1 = tf.keras.layers.Dense(4, activation='relu')
self.dense2 = tf.keras.layers.Dense(1)
def call(self, inputs):
x = self.dense1(inputs)
return self.dense2(x)
model = CustomModel()
optimizer = tf.keras.optimizers.Adam()
loss_fn = tf.keras.losses.MeanSquaredError()
# 自定义训练循环
for epoch in range(100):
with tf.GradientTape() as tape:
predictions = model(X_train)
loss = loss_fn(y_train, predictions)
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
五、进阶功能
- 保存与加载模型
model.save('my_model') # 保存为 SavedModel 格式
loaded_model = tf.keras.models.load_model('my_model')
- TensorBoard 可视化
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir='./logs')
model.fit(X_train, y_train, epochs=5, callbacks=[tensorboard_callback])
# 命令行运行:tensorboard --logdir=./logs
- 分布式训练
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
model = tf.keras.Sequential([...]) # 在分布式上下文中定义模型
model.fit(...)
六、注意事项
- 版本兼容性:TensorFlow 2.x 不兼容 1.x 代码,可使用
tf.compat.v1
兼容旧代码。 - GPU 支持:确保安装对应版本的 CUDA 和 cuDNN。
- 调试技巧:使用
tf.print()
输出中间张量值,结合tf.debugging
模块检查数值问题。
资源推荐
问题解决
- 问题: ImportError: DLL load failed while importing _pywrap_tensorflow_internal: 动态链接库(DLL)初始化例程失败。
详细错误信息如下图:
原因: TensorFlow 2.x 支持的 Python 版本有限,例如 TensorFlow 2.10 支持 Python 3.7-3.10,但不支持 Python 3.11。
解决方法:
降级到 Python 3.10 或更低版本。
可以安装Anaconda来管理多个Python环境, 安装Anaconda之后,可以在VS Code创建多个Python环境: