《飞桨 PaddlePaddle 快速上手》
飞桨(PaddlePaddle)是百度开源的深度学习框架,提供动态图(Dygraph,类似 PyTorch)与高层 API。本文介绍安装与一个简单的 MLP 分类示例,帮助从 Keras/TensorFlow 迁移的用户快速上手。
1 安装
# CPU 版
pip install paddlepaddle
# GPU 版(CUDA 环境)
pip install paddlepaddle-gpu
验证:
import paddle
print(paddle.__version__)
print(paddle.utils.run_check())
2 高层 API 快速示例(鸢尾花二分类 MLP)
import paddle
import numpy as np
# 1. 构造数据(线性可分示例)
np.random.seed(0)
x = np.random.normal(size=(200, 2)).astype("float32")
y = ((x[:, 0] + x[:, 1] > 0).astype("int64")).reshape(-1, 1)
# 转为 paddle Tensor
x = paddle.to_tensor(x)
y = paddle.to_tensor(y)
# 2. 定义模型(继承 paddle.nn.Layer)
class MLP(paddle.nn.Layer):
def __init__(self):
super().__init__()
self.fc1 = paddle.nn.Linear(2, 32)
self.fc2 = paddle.nn.Linear(32, 1)
def forward(self, x):
h = paddle.nn.functional.relu(self.fc1(x))
return self.fc2(h)
model = MLP()
# 3. 定义优化器与损失
opt = paddle.optimizer.Adam(learning_rate=0.01, parameters=model.parameters())
loss_fn = paddle.nn.functional.binary_cross_entropy_with_logits
# 4. 训练
model.train()
for epoch in range(200):
logits = model(x)
loss = loss_fn(logits, y.astype("float32"))
loss.backward()
opt.step()
opt.clear_grad()
if epoch % 50 == 0:
print(f"epoch {epoch}, loss: {loss.item():.4f}")
# 5. 预测
model.eval()
pred = (paddle.nn.functional.sigmoid(model(x)).numpy() > 0.5).astype("int32")
print("accuracy:", (pred.flatten() == y.numpy().flatten()).mean())
3 与 Keras 概念对照
| 概念 | Keras (tf.keras) | PaddlePaddle |
|---|---|---|
| 模型基类 | keras.Model / Sequential |
paddle.nn.Layer |
| 全连接层 | layers.Dense(units, activation=...) |
paddle.nn.Linear(in, out) + 显式激活函数 |
| 优化器 | keras.optimizers.Adam(...) |
paddle.optimizer.Adam(...) |
| 损失 | keras.losses.binary_crossentropy |
paddle.nn.functional.binary_cross_entropy... |
| 梯度清零 | opt.apply_gradients / tape |
opt.clear_grad() |
| 保存模型 | model.save("m.h5") |
paddle.save(model.state_dict(), "m.pdparams") |
要点差异:
- Paddle 的
Linear需要显式传入输入维度;Keras 的Dense会自动推断。 - 默认动态图模式,梯度更新前需要
opt.clear_grad()手动清空梯度。 - 激活函数一般通过
paddle.nn.functional.*显式调用。
4 常见问题
paddle.utils.run_check()报错:多为 CUDA/显存问题,CPU 环境只装paddlepaddle即可。- 数据类型不匹配:Paddle 强制 float32/int64 严格区分,
to_tensor前先astype。 - eval 时结果抖动:训练/预测模式切换需显式调用
model.train()/model.eval()(影响 Dropout/BatchNorm 等层)。
5 学习资源
- 官方文档:https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/index_cn.html
- 快速入门与生态(PaddleNLP / PaddleOCR / PaddleX):https://www.paddlepaddle.org.cn/
阅读 —
·
全站 —