"""检查点存取。""" from __future__ import annotations from pathlib import Path from typing import Any import torch from torch import nn def save_checkpoint( path: str | Path, model: nn.Module, optimizer: torch.optim.Optimizer | None = None, epoch: int = 0, best_metric: float | None = None, config: dict | None = None, ) -> Path: path = Path(path) path.parent.mkdir(parents=True, exist_ok=True) torch.save( { "model": model.state_dict(), "optimizer": optimizer.state_dict() if optimizer else None, "epoch": epoch, "best_metric": best_metric, "config": config, }, path, ) return path def load_checkpoint( path: str | Path, model: nn.Module, optimizer: torch.optim.Optimizer | None = None, map_location: Any = "cpu", strict: bool = True, ) -> dict: state = torch.load(Path(path), map_location=map_location, weights_only=False) model.load_state_dict(state["model"], strict=strict) if optimizer is not None and state.get("optimizer"): optimizer.load_state_dict(state["optimizer"]) return state