城市建设学校网站管理规章制度,微信网站是多少钱一年,xampp安装wordpress,网游排行榜2022在 PyTorch 中#xff0c;有几种常见的方法来保存和加载模型#xff0c;具体方法取决于你想保存什么内容#xff08;例如#xff0c;只保存模型的权重#xff0c;还是保存整个模型#xff09;。下面我将介绍几种常见的保存和加载模型的方法。
1、保存和加载模型的 state…在 PyTorch 中有几种常见的方法来保存和加载模型具体方法取决于你想保存什么内容例如只保存模型的权重还是保存整个模型。下面我将介绍几种常见的保存和加载模型的方法。
1、保存和加载模型的 state_dict
state_dict 是一个简单的 Python 字典对象它将每一层的参数映射到其对应的张量tensor。这是最推荐的保存方式因为它只保存模型的权重和参数而不依赖于模型的代码结构。保存模型的 state_dict
import torch
import torch.nn as nn# 假设我们有一个模型
model nn.Linear(10, 2)# 保存模型的 state_dict
torch.save(model.state_dict(), model.pth)加载模型的 state_dict
import torch
import torch.nn as nn# 假设我们有相同结构的模型
model nn.Linear(10, 2)# 加载 state_dict
model.load_state_dict(torch.load(model.pth))# 使用模型
model.eval()2、保存和加载整个模型
这种方法不仅保存了模型的权重和参数还保存了模型的结构。因此整个模型在加载时不需要再定义模型结构。尽管这提供了更大的便利性但也有一些缺点比如文件可能与代码过于耦合会保存模型的类和结构如果代码发生变化可能无法加载。保存整个模型
import torch
import torch.nn as nn# 假设我们有一个模型
model nn.Linear(10, 2)# 保存整个模型
torch.save(model, model_entire.pth)加载整个模型
import torch# 加载整个模型
model torch.load(model_entire.pth)# 使用模型
model.eval()3、保存和加载 checkpoint保存更多的训练状态
如果你希望保存更多的训练信息例如优化器状态、当前的 epoch 以及训练损失等以便后续继续训练可以保存一个包含多个内容的字典。保存 checkpoint
import torch
import torch.nn as nn
import torch.optim as optim# 假设我们有一个模型和优化器
model nn.Linear(10, 2)
optimizer optim.SGD(model.parameters(), lr0.001)# 保存 checkpoint
checkpoint {epoch: 10,model_state_dict: model.state_dict(),optimizer_state_dict: optimizer.state_dict(),loss: 0.5,
}torch.save(checkpoint, checkpoint.pth)加载 checkpoint
import torch
import torch.nn as nn
import torch.optim as optim# 假设我们有相同结构的模型和优化器
model nn.Linear(10, 2)
optimizer optim.SGD(model.parameters(), lr0.001)# 加载 checkpoint
checkpoint torch.load(checkpoint.pth)
model.load_state_dict(checkpoint[model_state_dict])
optimizer.load_state_dict(checkpoint[optimizer_state_dict])
epoch checkpoint[epoch]
loss checkpoint[loss]# 恢复训练
model.train()4、动态量化后的模型保存与加载
如果你对模型进行了量化如动态量化你可能需要保存量化后的模型。保存和加载方法与保存 state_dict 类似。动态量化模型
import torch
import torch.nn as nn# 假设我们有一个模型
model nn.Linear(10, 2)# 进行动态量化
quantized_model torch.quantization.quantize_dynamic(model, {nn.Linear}, dtypetorch.qint8
)# 保存量化后的模型
torch.save(quantized_model.state_dict(), quantized_model.pth)加载量化模型
import torch
import torch.nn as nn# 重新定义与量化前相同的模型结构
model nn.Linear(10, 2)# 加载量化后的模型权重
model.load_state_dict(torch.load(quantized_model.pth))
model.eval()总结
保存 state_dict最常用和推荐的方式只保存模型参数需手动重新定义模型结构后加载。保存整个模型保存模型结构和参数一次性加载整个模型但依赖于模型的代码结构。保存 checkpoint适合长时间训练的场景保存更多状态以便后续继续训练。保存量化后的模型用于保存经过量化处理的模型节省存储空间并提升推理速度。
不同的保存方式适合不同的使用场景推荐使用 state_dict 来保存模型权重尤其是在需要在不同环境或版本中加载模型时。