PyTorch 保存和加载模型状态和优化器状态

以下示例代码展示了如何在 PyTorch 中保存和加载模型状态和优化器状态,以便训练中断后可以继续训练。

1. 保存模型和优化器状态

假设模型训练了一段时间后,我们想要保存模型和优化器的状态,确保下次可以从同一位置继续训练。

2. 加载模型和优化器状态

加载保存的状态后,可以从保存的 epoch 继续训练。

示例代码

复制代码
import torch
import torch.nn as nn
import torch.optim as optim

# 假设我们定义了一个简单的模型
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc = nn.Linear(10, 2)

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

# 创建模型和优化器
model = SimpleModel()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 模拟的训练代码片段
num_epochs = 20
checkpoint_path = "model_checkpoint.pth"

# 保存模型和优化器状态
def save_checkpoint(epoch, model, optimizer, path):
    torch.save({
        'epoch': epoch,
        'model_state_dict': model.state_dict(),
        'optimizer_state_dict': optimizer.state_dict()
    }, path)
    print(f"Checkpoint saved at epoch {epoch}.")

# 加载模型和优化器状态
def load_checkpoint(model, optimizer, path):
    checkpoint = torch.load(path)
    model.load_state_dict(checkpoint['model_state_dict'])
    optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
    start_epoch = checkpoint['epoch']
    print(f"Checkpoint loaded, starting at epoch {start_epoch}.")
    return start_epoch

# 尝试加载已保存的检查点
try:
    start_epoch = load_checkpoint(model, optimizer, checkpoint_path)
except FileNotFoundError:
    start_epoch = 0
    print("No checkpoint found, starting training from scratch.")

# 继续训练
for epoch in range(start_epoch, num_epochs):
    # 模拟训练步骤
    # output = model(input) ...
    # loss = loss_fn(output, target) ...
    # optimizer.zero_grad()
    # loss.backward()
    # optimizer.step()

    print(f"Epoch {epoch+1}/{num_epochs} completed.")

    # 每 5 个 epoch 保存一次模型状态
    if (epoch + 1) % 5 == 0:
        save_checkpoint(epoch + 1, model, optimizer, checkpoint_path)

解释

  1. 保存save_checkpoint 函数会在指定的 epoch 保存模型和优化器状态。
  2. 加载load_checkpoint 函数会加载模型和优化器状态,并返回上次的 epoch,以便继续训练。
  3. 训练控制start_epoch 变量控制了是否继续从之前的检查点继续训练,确保模型在中断后可以接着训练。
相关推荐
sonadorje2 分钟前
机器学习中的逻辑回归
人工智能·机器学习·逻辑回归
渡我白衣4 分钟前
计算机组成原理(14):算术逻辑单元ALU
大数据·人工智能·算法·机器学习·计组·数电·alu
北京耐用通信4 分钟前
耐达讯自动化CANopen转Profibus网关:为风力发电场打造高可靠协议转换解决方案
人工智能·物联网·网络协议·自动化·信息与通信
北京耐用通信5 分钟前
耐达讯自动化CANopen转Profibus 网关:实现光伏逆变器无缝接入工业以太网的技术解析
网络·人工智能·物联网·网络协议·自动化·信息与通信
GeeLark5 分钟前
GeeLark 12月功能更新合集
人工智能·智能手机·自动化
设计是门艺术6 分钟前
AI 生成 PPT 工具大全,智能排版 + 互动效果拉满
人工智能
移远通信6 分钟前
移远5G-A王炸模组上线!AI+Wi-Fi 8+卫星通信,三重Buff叠满
人工智能·5g·移远通信
Aaron_9457 分钟前
Memos:开源自托管笔记服务的技术深度解析
人工智能
人工智能知识库8 分钟前
华为HCIA-AI Solution H13-313题库(带详细解析)
人工智能·华为·hcia-ai·h13-313
深度之眼8 分钟前
机器学习可解释性的研究进展!
深度学习·机器学习·可解释性