Berbagi teknologi

Bagaimana melanjutkan pelatihan setelah menyimpan model pytorch secara lokal

2024-07-12

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

Di PyTorch, Anda dapat menyimpan dan memuat model serta melanjutkan pelatihan dengan mengikuti langkah-langkah berikut:

  1. Simpan modelnya

    Biasanya ada dua cara untuk menyimpan model:

    • Simpan seluruh model (termasuk struktur jaringan, bobot, dll.):

      torch.save(model, 'model.pth')
    • Hanya state_dict model (hanya berisi parameter bobot) yang disimpan. Cara ini direkomendasikan karena menghemat ruang penyimpanan dan lebih fleksibel saat memuat:

      torch.save(model.state_dict(), 'model_weights.pth')
  2. Model beban

    Sejalan dengan itu, ada dua cara untuk memuat model:

    • Jika Anda sudah menyimpan seluruh model sebelumnya, Anda dapat langsung memuatnya dengan cara berikut:

      model = torch.load('model.pth')
    • Jika Anda hanya menyimpan state_dict sebelumnya, Anda perlu membuat instance model dengan struktur yang sama dengan model asli, lalu meneruskanload_state_dict()Metode memuat beban:

      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. melanjutkan pelatihan

    Setelah memuat model, Anda dapat melanjutkan pelatihan. Pastikan Anda telah menentukan fungsi kerugian dan pengoptimal serta statusnya dimuat dengan benar (jika Anda menyimpannya sebelumnya).Kemudian, ikuti saja proses latihan normal

    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()

Dengan cara ini, Anda dapat melanjutkan pelatihan model dari tempat terakhir Anda menyimpannya.