導入
苦労して学習させたモデルは、毎回学習し直さず保存して再利用します。また、本格的な学習を現実的な時間で終わらせる鍵が GPU です。実務で必ず使う2点を押さえて、次章のファインチューニングへ進みます。
説明
保存と読み込みは、モデルの中身(学習した重み=state_dict)を保存するのが定石です。
# 保存
torch.save(model.state_dict(), "model.pth")
# 読み込み(同じ構造のモデルを用意してから重みを流し込む)
model = XORNet()
model.load_state_dict(torch.load("model.pth"))
model.eval() # 推論モードに切り替え
推論(予測) のときは、勾配計算をオフにして高速・省メモリにします。
model.eval()
with torch.no_grad():
result = model(new_input)
GPU は行列計算を桁違いに速くこなす装置です。.to(device) でモデルとデータを GPU に載せるだけで、コードの本筋は変わりません。
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)
batch_x = batch_x.to(device)
flowchart LR train["学習<br/>(時間がかかる)"] --> save["state_dict を保存<br/>model.pth"] save --> load["別の場所で読み込み"] load --> infer["no_grad で推論<br/>(速い・軽い)"]
なぜGPUが要るのか
第3章で見た通り、NN の計算は巨大な行列の掛け算の山です。GPU はこの掛け算を何千個も同時に処理できるため、CPU の数十〜数百倍速くなることも。だからディープラーニングの学習は GPU(や Google Colab の無料GPU)で行うのが定石です。
まとめ
- 学習済みモデルは
state_dictをtorch.save/load_state_dictで保存・再利用する。 - 推論時は
model.eval()+torch.no_grad()で高速・省メモリに。 - GPU は行列計算を大量並列で高速化する。
.to(device)で載せるだけ。本格学習の必須装備。