기술나눔

Pytorch 모델을 로컬에 저장한 후 훈련을 계속하는 방법

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

PyTorch에서는 다음 단계에 따라 모델을 저장 및 로드하고 훈련을 계속할 수 있습니다.

  1. 모델 저장

    일반적으로 모델을 저장하는 방법에는 두 가지가 있습니다.

    • 전체 모델(네트워크 구조, 가중치 등 포함)을 저장합니다.

      torch.save(model, 'model.pth')
    • 모델의 state_dict(가중치 매개변수만 포함)만 저장됩니다. 이 방법은 저장 공간을 절약하고 로드 시 더 유연하기 때문에 권장됩니다.

      torch.save(model.state_dict(), 'model_weights.pth')
  2. 모델 로드

    이에 따라 모델을 로드하는 방법에는 두 가지가 있습니다.

    • 이전에 전체 모델을 저장한 경우 다음 방법으로 직접 로드할 수 있습니다.

      model = torch.load('model.pth')
    • 이전에 state_dict만 저장한 경우 원본 모델과 동일한 구조로 모델을 인스턴스화한 다음 통과해야 합니다.load_state_dict()가중치를 로드하는 방법:

      1. # 实例化一个与原模型结构相同的模型
      2. model = YourModelClass()
      3. # 加载保存的state_dict
      4. model.load_state_dict(torch.load('model_weights.pth'))
      5. # 确保将模型转移到正确的设备上(例如GPU或CPU)
      6. device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
      7. model.to(device)
  3. 훈련을 계속하다

    모델을 로드한 후 훈련을 계속할 수 있습니다. 손실 함수와 최적화 프로그램을 정의했고 해당 상태가 올바르게 로드되었는지 확인하세요(이전에 저장한 경우).그런 다음 일반적인 훈련 과정을 따르세요.

    1. # 定义损失函数和优化器
    2. criterion = nn.CrossEntropyLoss()
    3. optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
    4. # 如果之前保存了优化器状态,也可以加载
    5. optimizer.load_state_dict(torch.load('optimizer.pth'))
    6. # 开始训练
    7. for epoch in range(num_epochs):
    8. for inputs, labels in dataloader:
    9. inputs, labels = inputs.to(device), labels.to(device)
    10. optimizer.zero_grad()
    11. outputs = model(inputs)
    12. loss = criterion(outputs, labels)
    13. loss.backward()
    14. optimizer.step()

이렇게 하면 마지막으로 저장한 위치부터 모델 훈련을 계속할 수 있습니다.