一、TensorFlow 基础知识
1. 核心概念
- 张量 (Tensor): 多维数组,是 TensorFlow 的基本数据单位(标量、向量、矩阵等)。
- 计算图 (Graph): 早期版本中的静态图机制(TF2.x 默认启用动态图)。
- 会话 (Session): 在 TF1.x 中用于执行计算图(TF2.x 中已弃用)。
2. 基本操作
import tensorflow as tf
# 创建张量
a = tf.constant([[1, 2], [3, 4]]) # 形状 (2, 2)
b = tf.constant([[5, 6], [7, 8]])
# 张量运算
c = tf.add(a, b) # 逐元素加法
d = tf.matmul(a, b) # 矩阵乘法
print("加法结果:\n", c.numpy())
print("矩阵乘法结果:\n", d.numpy())
二、高级用法
1. Keras API 快速建模
from tensorflow.keras import layers, models
# 构建顺序模型
model = models.Sequential([
layers.Dense(64, activation='relu', input_shape=(784,)),
layers.Dropout(0.2),
layers.Dense(10, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 打印模型结构
model.summary()
2. 自定义训练循环
# 自定义损失函数和训练步骤
@tf.function
def train_step(inputs, labels):
with tf.GradientTape() as tape:
predictions = model(inputs)
loss = tf.keras.losses.sparse_categorical_crossentropy(labels, predictions)
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
return loss
三、深入进阶
1. 混合精度训练
# 启用混合精度策略
from tensorflow.keras.mixed_precision import set_global_policy
set_global_policy('mixed_float16')
# 模型会自动使用混合精度
model = models.Sequential([
layers.Dense(1024, activation='relu'), # 自动转为 float16
layers.Dense(10, dtype='float32') # 输出层保持 float32
])
2. 分布式训练
# 多GPU训练策略
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
model = models.Sequential([...])
model.compile(...)
model.fit(train_dataset, epochs=10)
四、完整案例
案例1:图像分类(CNN)
# 加载数据
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
# 预处理
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
# 构建CNN模型
model = models.Sequential([
layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
layers.MaxPooling2D((2,2)),
layers.Flatten(),
layers.Dense(10, activation='softmax')
])
# 训练配置
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
history = model.fit(train_images, train_labels,
epochs=5,
validation_split=0.2)
# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f'Test accuracy: {
test_acc}')
五、学习路径建议
1. 分阶段学习
-
基础阶段(2周):
- 张量操作
- 全连接网络
- Keras API 基础
-
中级阶段(3周):
- CNN/RNN实现
- 数据管道(tf.data)
- 模型保存/加载
-
高级阶段(4周):
- 自定义训练循环
- 分布式训练
- TensorFlow Serving 部署
2. 推荐资源
- 官方文档:tensorflow.org
- 实战书籍:《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow》
- 社区:Stack Overflow(标签
tensorflow
)、GitHub 开源项目
六、关键代码示例
自定义层示例
class CustomDense(layers.Layer):
def __init__(self, units=32):
super().__init__()
self.units = units
def build(self, input_shape):
# 初始化权重
self.w = self.add_weight(
shape=(input_shape[-1], self.units),
initializer="random_normal",
trainable=True,
)
self.b = self.add_weight(
shape=(self.units,), initializer="zeros", trainable=True
)
def call(self, inputs):
# 前向传播计算
return tf.matmul(inputs, self.w) + self.b
# 使用自定义层
model = models.Sequential([
CustomDense(64),
layers.ReLU(),
CustomDense(10)
])
六、模型部署与生产化
1. 模型保存与加载
# 保存整个模型(架构+权重+优化器状态)
model.save('my_model.keras') # 或使用 SavedModel 格式
# 加载模型
loaded_model = tf.keras.models.load_model('my_model.keras')
# 仅保存权重
model.save_weights('model_weights.weights.h5')
# 仅保存架构
with open('model_architecture.json', 'w') as f:
f.write(model.to_json())
2. TensorFlow Serving 部署
# 安装 TensorFlow Serving
echo "deb [arch=amd64] http://storage.googleapis.com/tensorflow-serving-apt stable tensorflow-model-server tensorflow-model-server-universal" | sudo tee /etc/apt/sources.list.d/tensorflow-serving.list
curl https://storage.googleapis.com/tensorflow-serving-apt/tensorflow-serving.release.pub.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install tensorflow-model-server
# 启动服务
tensorflow_model_server \
--rest_api_port=8501 \
--model_name=my_model \
--model_base_path=/path/to/saved_model
七、性能优化技巧
1. 使用 tf.data 构建高效数据管道
# 从内存数据创建 Dataset
dataset = tf.data.Dataset.from_tensor_slices((images, labels)