paddle动态图模型保存与加载

#模型的保存和加载

import numpy as np
import paddle
import paddle.nn as nn
import paddle.optimizer as opt

BATCH_SIZE = 16
BATCH_NUM = 4
EPOCH_NUM = 4

IMAGE_SIZE = 784
CLASS_NUM = 10

final_checkpoint = dict()

# 定义一个随机数据集
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().__init__()
        self._linear = nn.Linear(IMAGE_SIZE, CLASS_NUM)

    def forward(self, x):
        return self._linear(x)

def train(layer, loader, loss_fn, opt):
    for epoch_id in range(EPOCH_NUM):
        for batch_id, (image, label) in enumerate(loader()):
            out = layer(image)
            loss = loss_fn(out, label)
            loss.backward()
            opt.step()
            opt.clear_grad()
            print("Epoch {} batch {}: loss = {}".format(
                epoch_id, batch_id, np.mean(float(loss))))
            print('epoch{}'.format(epoch_id),'优化器',opt.state_dict())
        # 最后一个epoch保存检查点checkpoint
        if epoch_id == EPOCH_NUM - 1:
            final_checkpoint["epoch"] = epoch_id
            final_checkpoint["loss"] =float(loss)

# 创建网络、loss和优化器
layer = LinearNet()
loss_fn = nn.CrossEntropyLoss()
adam = opt.Adam(learning_rate=0.001, parameters=layer.parameters())

# 创建用于载入数据的DataLoader
dataset = RandomDataset(BATCH_NUM * BATCH_SIZE)
loader = paddle.io.DataLoader(dataset,
    batch_size=BATCH_SIZE,
    shuffle=True,
    drop_last=True,
    num_workers=0)
print('模型',type(layer),'模型结构',layer,'layer.state_dict()',layer.state_dict())
print('优化器',adam.state_dict())
# 开始训练
train(layer, loader, loss_fn, adam)
print('保存的对象',final_checkpoint)

##保存模型参数

# 保存Layer参数
paddle.save(layer.state_dict(), "linear_net.pdparams")
# 保存优化器参数
paddle.save(adam.state_dict(), "adam.pdopt")
# 保存检查点checkpoint信息
paddle.save(final_checkpoint, "final_checkpoint.pkl")


##加载动态图模型

final_checkpoint=paddle.load('final_checkpoint.pkl')
print('final_checkpoint',final_checkpoint)
layer_state_dict=paddle.load('linear_net.pdparams')
print('layer_state_dict',layer_state_dict)
opt_state_dict=paddle.load('adam.pdopt')
print('adam state_dict',opt_state_dict)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PaddlePaddle 框架中,可以使用 `paddle.load` 函数加载保存模型。以下是一个简单的示例代码,展示了如何保存加载模型: ```python import paddle # 定义模型 model = paddle.nn.Linear(10, 2) # 保存模型 paddle.save(model.state_dict(), 'model.pdparams') # 加载模型 loaded_model_state_dict = paddle.load('model.pdparams') loaded_model = paddle.nn.Linear(10, 2) loaded_model.set_state_dict(loaded_model_state_dict) # 使用加载模型进行推理 input_data = paddle.randn([1, 10]) output = loaded_model(input_data) print(output) ``` 在上述示例中,我们首先定义了一个简单的线性模型 `model`,然后使用 `paddle.save` 函数保存模型的状态字典(state_dict)到文件 `model.pdparams` 中。 接着,我们使用 `paddle.load` 函数加载保存模型参数,返回的结果是一个字典类型的对象。我们再次定义了一个与原模型相同结构的新模型 `loaded_model`,并使用 `set_state_dict` 方法将加载的参数设置给新模型。 最后,我们使用加载模型进行推理,输入一个随机生成的张量 `input_data`,并打印输出结果 `output`。 需要注意的是,加载模型时需要确保加载模型结构与原模型相匹配,否则可能会导致错误。此外,还可以通过指定 `map_location` 参数来选择加载模型的设备(如 CPU 或 GPU)。 更多关于模型保存加载的信息,可以参考 PaddlePaddle 官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一壶浊酒..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值