PaddlePaddle飞桨(学习笔记六——模型训练、评估与推理)
- 2025-09-20 01:14:45
目录
1、训练前准备
1.1 指定训练的硬件
1.2 准备训练用的数据集和模型
2、使用 paddle.Model 高层 API 训练、评估与推理
paddle.Model 封装模型
Model.prepare 配置训练准备参数
Model.fit 训练模型
Model.evaluate 评估模型
Model.predict 执行推理
2.1 使用 paddle.Model 封装模型
2.2 使用 Model.prepare 配置训练准备参数
2.3 使用 Model.fit 训练模型
2.4 使用 Model.evaluate 评估模型
2.5 使用 Model.predict 执行推理
2.6 总结
3、使用基础 API 训练、评估与推理
3.1 模型训练(拆解 Model.prepare、Model.fit)
3.2 模型评估(拆解 Model.evaluate)
3.3 模型推理(拆解 Model.predict)
3.4 总结
4、高层 API 和基础 API 组合使用
1、训练前准备
1.1 指定训练的硬件
模型训练时,需要用到 CPU、 GPU 等计算处理器资源,由于飞桨框架的安装包是区分处理器类型的,默认情况下飞桨框架会根据所安装的版本自动选择对应硬件,比如安装的 GPU 版本的飞桨,则自动使用 GPU 训练模型,无需手动指定。因此一般情况下,无需执行此步骤。
但是如果安装的 GPU 版本的飞桨框架,想切换到 CPU 上训练,则可通过 paddle.device.set_device 修改。如果本机有多个 GPU 卡,也可以通过该 API 选择指定的卡进行训练,不指定的情况下则默认使用 'gpu:0'。
import paddle
# 指定在 CPU 上训练
paddle.device.set_device('cpu')
# 指定在 GPU 第 0 号卡上训练
paddle.device.set_device('gpu:0')
1.2 准备训练用的数据集和模型
模型训练前,需要先完成数据集的加载和模型组网,以 MNIST 手写数字识别任务为例,代码示例如下:
from paddle.vision.transforms import Normalize
transform = Normalize(mean=[127.5], std=[127.5], data_format='CHW')
# 加载 MNIST 训练集和测试集
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)
# 模型组网,构建并初始化一个模型 mnist
mnist = paddle.nn.Sequential(
paddle.nn.Flatten(1, -1),
paddle.nn.Linear(784, 512),
paddle.nn.ReLU(),
paddle.nn.Dropout(0.2),
paddle.nn.Linear(512, 10)
)
2、使用 paddle.Model 高层 API 训练、评估与推理
paddle.Model 封装模型
Model.prepare 配置训练准备参数
Model.fit 训练模型
Model.evaluate 评估模型
Model.predict 执行推理
2.1 使用 paddle.Model 封装模型
# 封装模型为一个 model 实例,便于进行后续的训练、评估和推理
model = paddle.Model(mnist)
2.2 使用 Model.prepare 配置训练准备参数
用 paddle.Model 完成模型的封装后,需通过 Model.prepare 进行训练前的配置准备工作,包括设置优化算法、Loss 计算方法、评价指标计算方法:
优化器(optimizer):即寻找最优解的方法,可计算和更新梯度,并根据梯度更新模型参数。飞桨框架在 paddle.optimizer 下提供了优化器相关 API。并且需要为优化器设置合适的学习率,或者指定合适的学习率策略,飞桨框架在 paddle.optimizer.lr 下提供了学习率策略相关的 API。
损失函数(loss):用于评估模型的预测值和真实值的差距,模型训练过程即取得尽可能小的 loss 的过程。飞桨框架在 paddle.nn Loss层 提供了适用不同深度学习任务的损失函数相关 API。
评价指标(metrics):用于评估模型的好坏,不同的任务通常有不同的评价指标。飞桨框架在 paddle.metric 下提供了评价指标相关 API。
# 为模型训练做准备,设置优化器及其学习率,并将网络的参数传入优化器,设置损失函数和精度计算方式
model.prepare(optimizer=paddle.optimizer.Adam(learning_rate=0.001,parameters=model.parameters()),
loss=paddle.nn.CrossEntropyLoss(),
metrics=paddle.metric.Accuracy())
2.3 使用 Model.fit 训练模型
需要指定至少三个关键参数:训练数据集,训练轮次和每批次大小:
训练数据集:传入之前定义好的训练数据集。
训练轮次(epoch):训练时遍历数据集的次数,即外循环轮次。
批次大小(batch_size):内循环中每个批次的训练样本数。
# 启动模型训练,指定训练数据集,设置训练轮次,设置每次数据集计算的批次大小,设置日志格式
model.fit(train_dataset,
epochs=5,
batch_size=64,
verbose=1)
2.4 使用 Model.evaluate 评估模型
使用
