在 PyTorch 中,你可以通过以下步骤保存和加载模型,然后继续训练:
-
保存模型
通常有两种方式来保存模型:
-
保存整个模型(包括网络结构、权重等):
torch.save(model, 'model.pth')
-
只保存模型的state_dict(只包含权重参数),推荐使用这种方式,因为这样可以节省存储空间,并且在加载时更灵活:
torch.save(model.state_dict(), 'model_weights.pth')
-
-
加载模型
对应地,也有两种方式来加载模型:
-
如果你之前保存了整个模型,可以直接通过下面的方式加载:
model = torch.load('model.pth')
-
如果你之前只保存了state_dict,需要先实例化一个与原模型结构相同的模型,然后通过
load_state_dict()
方法加载权重:# 实例化一个与原模型结构相同的模型 model = YourModelClass() # 加载保存的state_dict model.load_state_dict(torch.load('model_weights.pth')) # 确保将模型转移到正确的设备上(例如GPU或CPU) device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device)
-
-
继续训练
加载完模型后,就可以继续训练了。确保你已经定义了损失函数和优化器,并且它们的状态也要正确加载(如果你之前保存了它们的话)。然后,按照正常的训练流程进行即可
# 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) # 如果之前保存了优化器状态,也可以加载 optimizer.load_state_dict(torch.load('optimizer.pth')) # 开始训练 for epoch in range(num_epochs): for inputs, labels in dataloader: inputs, labels = inputs.to(device), labels.to(device) optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step()
这样,你就可以从上次保存的地方继续训练模型了。