← 返回首页
🤖

TensorFlow深度学习框架详解

📂 ai ⏱ 2 min 218 words

TensorFlow深度学习框架详解

TensorFlow是Google开发的开源深度学习框架,提供完整的工具生态系统,支持从研究原型到生产部署的全流程。

tf.keras核心API

tf.keras是TensorFlow的高级API,提供简洁的模型构建方式。Sequential模型适合线性层堆叠,Functional API支持复杂网络拓扑。

import tensorflow as tf
from tensorflow import keras

# Sequential模型
model = keras.Sequential([
    keras.layers.Input(shape=(784,)),
    keras.layers.Dense(256, activation='relu'),
    keras.layers.Dropout(0.3),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dropout(0.3),
    keras.layers.Dense(10, activation='softmax')
])

model.summary()

# Functional API构建复杂模型
inputs = keras.Input(shape=(32, 32, 3))
x = keras.layers.Conv2D(32, (3, 3), activation='relu')(inputs)
x = keras.layers.MaxPooling2D((2, 2))(x)
x = keras.layers.Conv2D(64, (3, 3), activation='relu')(x)
x = keras.layers.GlobalAveragePooling2D()(x)
outputs = keras.layers.Dense(10, activation='softmax')(x)

cnn_model = keras.Model(inputs=inputs, outputs=outputs)

模型编译与训练

编译时配置优化器、损失函数和指标。fit方法支持批处理、验证集和回调函数。

model.compile(
    optimizer=keras.optimizers.Adam(learning_rate=0.001),
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

# 准备数据
import numpy as np
X_train = np.random.randn(2000, 784).astype('float32')
y_train = np.random.randint(0, 10, (2000,))

# 训练模型
history = model.fit(
    X_train, y_train,
    epochs=15,
    batch_size=64,
    validation_split=0.2,
    callbacks=[
        keras.callbacks.EarlyStopping(patience=3, restore_best_weights=True),
        keras.callbacks.ReduceLROnPlateau(factor=0.5, patience=2)
    ]
)

自定义训练循环

使用GradientTape实现完全自定义的训练逻辑,适合需要精细控制的场景。

optimizer = keras.optimizers.Adam(learning_rate=0.001)
loss_fn = keras.losses.SparseCategoricalCrossentropy()

@tf.function
def train_step(x, y):
    with tf.GradientTape() as tape:
        predictions = model(x, training=True)
        loss = loss_fn(y, predictions)
        loss += sum(model.losses)
    
    gradients = tape.gradient(loss, model.trainable_variables)
    optimizer.apply_gradients(zip(gradients, model.trainable_variables))
    return loss, predictions

for epoch in range(10):
    epoch_loss = 0.0
    for i in range(0, len(X_train), 64):
        x_batch = tf.constant(X_train[i:i+64])
        y_batch = tf.constant(y_train[i:i+64])
        loss, _ = train_step(x_batch, y_batch)
        epoch_loss += loss.numpy()
    print(f"Epoch {epoch+1}, Loss: {epoch_loss/(len(X_train)//64):.4f}")

分布式训练

TensorFlow通过分布式策略实现多GPU和多机训练,MirroredStrategy支持单机多卡数据并行。

strategy = tf.distribute.MirroredStrategy()

with strategy.scope():
    model = keras.Sequential([
        keras.layers.Dense(256, activation='relu', input_shape=(784,)),
        keras.layers.BatchNormalization(),
        keras.layers.Dense(128, activation='relu'),
        keras.layers.Dense(10, activation='softmax')
    ])
    model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])

print(f"可用设备: {strategy.num_replicas_in_sync} GPUs")

模型保存与部署

支持多种保存格式:SavedModel用于生产部署,Keras格式便于继续训练,TFLite用于移动端。

# 保存完整模型
model.save('saved_model/my_model')

# 保存权重
model.save_weights('model_weights.h5')

# 加载模型
loaded_model = keras.models.load_model('saved_model/my_model')

# TFLite转换
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

with open('model.tflite', 'wb') as f:
    f.write(tflite_model)

print(f"TFLite模型大小: {len(tflite_model)/1024:.1f} KB")

TensorFlow凭借完善的生态系统和工业级部署能力,成为深度学习框架的主流选择之一。