Repository navigation
Expand file tree
/
Copy pathCheckpoint_utils.py
More file actions
59 lines (47 loc) · 1.85 KB
/
Copy pathCheckpoint_utils.py
File metadata and controls
59 lines (47 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Project/checkpoint_utils.py
from __future__ import annotations
import os
from typing import Any, Dict, Optional
import torch
def save_checkpoint(
path: str,
*,
epoch: int,
model: torch.nn.Module,
optimizer: Optional[torch.optim.Optimizer] = None,
scheduler: Optional[Any] = None,
scaler: Optional[Any] = None, # torch.amp.GradScaler or torch.cuda.amp.GradScaler
class_to_idx: Optional[Dict[str, int]] = None,
extra: Optional[Dict[str, Any]] = None,
) -> None:
os.makedirs(os.path.dirname(path) or ".", exist_ok=True)
ckpt: Dict[str, Any] = {
"epoch": int(epoch),
"model_state_dict": model.state_dict(),
"optimizer_state_dict": optimizer.state_dict() if optimizer is not None else None,
"scheduler_state_dict": scheduler.state_dict() if scheduler is not None else None,
"scaler_state_dict": scaler.state_dict() if scaler is not None else None,
"class_to_idx": class_to_idx,
}
if extra:
ckpt.update(extra)
torch.save(ckpt, path)
def load_checkpoint(
path: str,
*,
model: torch.nn.Module,
optimizer: Optional[torch.optim.Optimizer] = None,
scheduler: Optional[Any] = None,
scaler: Optional[Any] = None,
map_location: str | torch.device = "cpu",
strict: bool = True,
) -> Dict[str, Any]:
ckpt = torch.load(path, map_location=map_location)
model.load_state_dict(ckpt["model_state_dict"], strict=strict)
if optimizer is not None and ckpt.get("optimizer_state_dict") is not None:
optimizer.load_state_dict(ckpt["optimizer_state_dict"])
if scheduler is not None and ckpt.get("scheduler_state_dict") is not None:
scheduler.load_state_dict(ckpt["scheduler_state_dict"])
if scaler is not None and ckpt.get("scaler_state_dict") is not None:
scaler.load_state_dict(ckpt["scaler_state_dict"])
return ckpt