TensorFlow 是由 Google Brain 团队于 2015 年开源的端到端机器学习平台,是深度学习领域最成熟的框架之一。TensorFlow 提供 静态计算图、自动微分、分布式训练、TensorBoard 可视化、TF Serving 部署 等完整工具链。
TensorFlow 的核心定位是 生产级端到端机器学习平台。它提供了:
TensorFlow 由 Google Brain 团队于 2015 年开源,基于 DistBelief(Google 内部框架)的经验构建。TensorFlow 2.0 引入了 Eager Execution,让开发更 Pythonic。
import tensorflow as tf
import numpy as np
# 张量创建
x = tf.constant([1, 2, 3, 4, 5])
y = tf.constant([[1, 2], [3, 4]])
z = tf.zeros([3, 4])
w = tf.ones([2, 3])
r = tf.random.normal([3, 3])
# 张量属性
print(x.shape) # (5,)
print(x.dtype) # tf.int32
print(x.device) # /device:CPU:0
# NumPy 互转
arr = np.array([1, 2, 3])
tensor = tf.constant(arr)
back_to_numpy = tensor.numpy()
# 张量运算
a = tf.constant([1, 2, 3])
b = tf.constant([4, 5, 6])
c = tf.add(a, b)
d = tf.multiply(a, b)
e = tf.tensordot(a, b, axes=1)
f = tf.reduce_sum(a)
# 顺序模型
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation="relu", input_shape=(784,)),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(64, activation="relu"),
tf.keras.layers.Dense(10, activation="softmax")
])
# 函数式 API
inputs = tf.keras.Input(shape=(784,))
x = tf.keras.layers.Dense(64, activation="relu")(inputs)
x = tf.keras.layers.Dropout(0.5)(x)
x = tf.keras.layers.Dense(64, activation="relu")(x)
outputs = tf.keras.layers.Dense(10, activation="softmax")(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
# 子类化 API
class MyModel(tf.keras.Model):
def __init__(self):
super(MyModel, self).__init__()
self.dense1 = tf.keras.layers.Dense(64, activation="relu")
self.dense2 = tf.keras.layers.Dense(64, activation="relu")
self.dense3 = tf.keras.layers.Dense(10, activation="softmax")
def call(self, inputs):
x = self.dense1(inputs)
x = self.dense2(x)
return self.dense3(x)
model = MyModel()
# 编译模型
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
loss=tf.keras.losses.CategoricalCrossentropy(),
metrics=["accuracy"]
)
# 训练模型
history = model.fit(
train_images, train_labels,
epochs=10,
batch_size=32,
validation_data=(val_images, val_labels),
callbacks=[
tf.keras.callbacks.EarlyStopping(patience=3),
tf.keras.callbacks.ModelCheckpoint("best_model.h5", save_best_only=True),
tf.keras.callbacks.TensorBoard(log_dir="./logs")
]
)
# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f"Test accuracy: {test_acc}")
# 预测
predictions = model.predict(test_images)
# 自定义训练(使用 GradientTape)
import tensorflow as tf
model = MyModel()
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
loss_fn = tf.keras.losses.CategoricalCrossentropy()
train_loss = tf.keras.metrics.Mean()
train_acc = tf.keras.metrics.CategoricalAccuracy()
@tf.function
def train_step(x, y):
with tf.GradientTape() as tape:
predictions = model(x, training=True)
loss = loss_fn(y, predictions)
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
train_loss(loss)
train_acc(y, predictions)
# 训练循环
for epoch in range(num_epochs):
train_loss.reset_states()
train_acc.reset_states()
for batch_x, batch_y in train_dataset:
train_step(batch_x, batch_y)
print(f"Epoch {epoch+1}, Loss: {train_loss.result():.4f}, Acc: {train_acc.result():.4f}")
model = tf.keras.Sequential([
# 卷积层
tf.keras.layers.Conv2D(32, (3, 3), activation="relu", input_shape=(28, 28, 1)),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Conv2D(64, (3, 3), activation="relu"),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Conv2D(64, (3, 3), activation="relu"),
# 全连接层
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation="relu"),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(10, activation="softmax")
])
model.compile(
optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"]
)
import tensorflow as tf
from tensorflow.keras.applications import ResNet50
# 加载预训练模型(不包含顶层)
base_model = ResNet50(
weights="imagenet",
include_top=False,
input_shape=(224, 224, 3)
)
# 冻结基础模型
base_model.trainable = False
# 添加自定义顶层
model = tf.keras.Sequential([
base_model,
tf.keras.layers.GlobalAveragePooling2D(),
tf.keras.layers.Dense(128, activation="relu"),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(10, activation="softmax")
])
# 编译和训练
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(train_data, train_labels, epochs=10, validation_data=(val_data, val_labels))
# 解冻部分层进行微调
base_model.trainable = True
for layer in base_model.layers[:100]:
layer.trainable = False
# 使用更小的学习率
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=1e-5),
loss="categorical_crossentropy",
metrics=["accuracy"]
)
model.fit(train_data, train_labels, epochs=5)
import tensorflow as tf
# 使用 MirroredStrategy(单机多卡)
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation="relu"),
tf.keras.layers.Dense(10, activation="softmax")
])
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
# 使用多 worker 策略
cluster_resolver = tf.distribute.cluster_resolver.TFConfigClusterResolver()
strategy = tf.distribute.MultiWorkerMirroredStrategy()
with strategy.scope():
# 定义模型
pass
# 保存模型(SavedModel 格式)
model.save("saved_model/")
model.save("model.h5")
# 加载模型
loaded_model = tf.keras.models.load_model("saved_model/")
# 导出为 TF Lite(移动端)
converter = tf.lite.TFLiteConverter.from_saved_model("saved_model/")
tflite_model = converter.convert()
with open("model.tflite", "wb") as f:
f.write(tflite_model)
# 导出为 TF.js(浏览器)
!tensorflowjs_converter --input_format=tf_saved_model saved_model/ web_model/
# TensorFlow Serving 部署
# 使用 Docker 启动 serving
# docker run -p 8501:8501 --mount type=bind,source=/path/to/model,target=/models/model -e MODEL_NAME=model -t tensorflow/serving
import tensorflow as tf
import datetime
# 创建 TensorBoard 回调
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
model.fit(
train_images, train_labels,
epochs=10,
callbacks=[tensorboard_callback]
)
# 启动 TensorBoard
# tensorboard --logdir logs/fit
| 对比项 | TensorFlow | PyTorch | JAX |
|---|---|---|---|
| 计算图 | 静态+动态 | 动态 | 动态 |
| 生产部署 | 极完善 | 完善 | 有限 |
| 移动端 | ✅ TF Lite | ❌ 有限 | ❌ |
| 浏览器 | ✅ TF.js | ❌ | ❌ |
| 学习曲线 | 中等 | 平缓 | 陡峭 |
Python、NumPy、机器学习基础
TensorFlow 张量、Keras 顺序模型、简单训练
CNN、RNN、迁移学习、自定义训练
分布式训练、模型部署(TF Serving、TF Lite)、MLOps
TensorFlow 是深度学习工业化的"标准平台"。
它用 完整的工具链、生产级部署、端到端支持 让机器学习从研究走向生产。TensorFlow 是企业级 AI 应用的首选框架。
"TensorFlow 让 AI 从实验走向生产。" 🚀