一、什么是模型的保存与加载?
人工智能模型本质上就是一堆参数,我们训练模型时就是使这些参数在某个任务上合理以使其能够得到较为准确预测结果输出。例如猫狗分类任务,训练一系列卷积核数值能够通过前向计算预测出类别。我们花了大量时间训练的模型肯定不想只训练结束后只使用一次,我们想的肯定是能够重复使用这个模型在后续的任务上继续做预测。那就涉及到模型的保存与加载。
二、模型的保存
paddle框架中模型保存加载相关API
paddle.save
paddle.load
paddle.jit.save
paddle.jit.load
paddle.static.save_inference_model
paddle.static.load_inference_model
其中paddle.save/load用于只保存/载入模型参数
paddle.jit.save/load可用于保存模型结构用作以后的推理
paddle.static.save_inference_model/load_inference_model用于保存静态图模型
api关系图

下面以一个paddle官方文档中给出的一个例子学习这几个api的使用,我会详细地注释每一行代码。
import numpy as np#引入nunpy计算包
import paddle#引入paddle包
import paddle.nn as nn#引入网络结构包
import paddle.optimizer as opt#引入优化器包
BATCH_SIZE = 16#batch_size:表示一批数据包含多少条数据,这里是16条数据
BATCH_NUM = 4#batch数
EPOCH_NUM = 4#训练轮数
IMAGE_SIZE = 784#输入数据尺寸
CLASS_NUM = 10#标签类别数
# define a random dataset
class RandomDataset(paddle.io.Dataset):#生成数据集类,模拟一个数据集
def __init__(self, num_samples):
self.num_samples = num_samples#样本数
def __getitem__(self, idx):
image = np.random.random([IMAGE_SIZE]).astype('float32')#生成数据
label = np.random.randint(0, CLASS_NUM - 1, (1, )).astype('int64')#生成标签
return image, label
def __len__(self):
return self.num_samples
class LinearNet(nn.Layer):#搭建网络结构
def __init__(self):
super(LinearNet, se

本文介绍了如何在PaddlePaddle框架中保存和加载模型,包括参数的单独保存、模型结构与参数的联合保存,以及针对训练部署的不同场景。通过实例演示了paddle.save, paddle.load, paddle.jit.save/load以及静态图模型的保存方式。

1421

被折叠的 条评论
为什么被折叠?



