TensorFlow快速介绍

发布于:2025-03-23 ⋅ 阅读:(27) ⋅ 点赞:(0)

TensorFlow 是由 Google 开发的开源机器学习框架,广泛用于深度学习、数值计算和数据处理。其核心基于数据流图(节点表示操作,边表示多维数据数组“张量”),支持灵活部署(CPU/GPU/TPU、移动设备、浏览器等)。


一、TensorFlow 核心特性
  1. 灵活性与可扩展性
    • 支持从线性回归到复杂神经网络模型的构建。
    • 提供低级 API(如张量操作)和高级 API(如 Keras)。
  2. 跨平台支持
    • 可在本地机器、云端、浏览器(TensorFlow.js)、移动端(TensorFlow Lite)运行。
  3. 即时执行模式(Eager Execution)
    • TensorFlow 2.x 默认启用 Eager Execution,无需构建静态计算图即可逐行执行代码。
  4. 分布式训练
    • 支持多 GPU 和 TPU 并行训练,适用于大规模数据集和模型。
  5. 丰富的生态系统
    • 包含 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


三、基础概念与组件
  1. 张量(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 随机初始化变量
- 用于存储模型参数(如神经网络的权重)。
  1. 自动微分(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
- 记录计算过程以实现自动求导。
  1. 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))

五、进阶功能
  1. 保存与加载模型
model.save('my_model')  # 保存为 SavedModel 格式
loaded_model = tf.keras.models.load_model('my_model')
  1. TensorBoard 可视化
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir='./logs')
model.fit(X_train, y_train, epochs=5, callbacks=[tensorboard_callback])
# 命令行运行:tensorboard --logdir=./logs
  1. 分布式训练
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 模块检查数值问题。

资源推荐
问题解决
  1. 问题: 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环境: