技術共有

pytorch モデルをローカルに保存した後にトレーニングを続ける方法

2024-07-12

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

PyTorch では、次の手順に従ってモデルを保存してロードし、トレーニングを続行できます。

  1. モデルの保存

    モデルを保存するには通常、次の 2 つの方法があります。

    • モデル全体 (ネットワーク構造、重みなどを含む) を保存します。

      torch.save(model, 'model.pth')
    • モデルの state_dict のみ (重みパラメーターのみを含む) が保存されます。この方法は、記憶域を節約し、ロード時により柔軟であるため、お勧めします。

      torch.save(model.state_dict(), 'model_weights.pth')
  2. モデルをロードする

    これに応じて、モデルをロードするには 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()

こうすることで、最後に保存した場所からモデルのトレーニングを続けることができます。