在 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()
這樣,你就可以從上次保存的地方繼續訓練模型了。