笔记:PyTorch文档阅读(2)序列化语义即保存模型

基本概念

序列化语义(Serialization Semantics)指的是将数据结构或对象的状态转换为可以存储或传输的格式的过程,以及将这些数据重新转换回原始状态的过程。在计算机科学中,序列化通常涉及以下两个主要方面:

  1. 序列化(Serialization):将对象的状态信息转换为字节流或文本表示形式,以便可以将其持久化到磁盘、数据库或通过网络发送给其他系统。序列化通常涉及将对象的属性值转换为一种格式,如JSON、XML或二进制格式。

  2. 反序列化(Deserialization):是序列化的逆过程,即将存储或传输的数据转换回原始的对象状态。反序列化允许在不同的时间点或不同的系统之间恢复对象的原始形态。

在深度学习中,序列化语义特别指模型参数或整个模型架构的序列化和反序列化。

主要有两种方法序列化和恢复模型

第一种(推荐)只保存和加载模型参数:

torch.save(the_model.state_dict(), PATH)

然后:

the_model = TheModelClass(*args, **kwargs)
the_model.load_state_dict(torch.load(PATH))

第二种保存和加载整个模型:

torch.save(the_model, PATH)

然后:

the_model = torch.load(PATH)

然而,在这种情况下,序列化的数据被绑定到特定的类和固定的目录结构,所以当在其他项目中使用时,或者在一些严重的重构器之后它可能会以各种方式break。

保存静态参数(第一种方法)

第一种推荐的方法,即只保存和加载模型参数,只涉及到模型的权重和偏置等参数,而不包括模型的架构。在加载模型时,需要先实例化模型架构,然后再将保存的参数加载到这个架构中。以下是这个过程的详细说明:

1.保存模型参数: 使用state_dict()方法,你可以获取模型的所有参数,并使用torch.save()将它们保存到文件中。

torch.save(the_model.state_dict(), PATH)

2.实例化模型架构

在加载模型之前,你需要根据模型的类定义重新创建模型的架构。这通常涉及到使用与创建原始模型相同的类和参数。

the_model = TheModelClass(*args, **kwargs)

这里的TheModelClass是模型的类名,*args**kwargs是创建模型实例时所需的参数和关键字参数。

3.加载模型参数

使用torch.load()加载保存的参数,然后使用load_state_dict()方法将这些参数加载到之前实例化的模型架构中。

the_model.load_state_dict(torch.load(PATH))

这样,模型的架构和参数就都恢复了,模型可以用于进一步的推理或继续训练。

实例
class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(5, 2)

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

# 保存模型参数
torch.save(simple_net.state_dict(), 'simple_net_params.pth')

# 加载模型参数
simple_net = SimpleNet()  # 实例化模型架构
simple_net.load_state_dict(torch.load('simple_net_params.pth'))
simple_net.eval()  # 将模型设置为评估模式

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值