ベストプラクティス
学習目標: ディープラーニングプロジェクトを成功させるための実践的な知見を学ぶ
データの準備
- データの品質確認: 欠損値、外れ値、ラベルの誤りをチェック
- 適切な分割: train/val/testの比率は70/15/15または80/10/10
- 正規化: 入力データを0-1または標準化(平均0、分散1)
- データ拡張: 訓練データが少ない場合は必須
モデル設計
- シンプルから始める: 複雑なモデルは後から
- 既存アーキテクチャを参考に: ResNet, VGGなど実績のある構造を使う
- BatchNormを活用: 学習を安定させ、収束を早める
- 適切な初期化: Xavier, He初期化を使用
学習プロセス
- 小さなデータで動作確認: まず100サンプルで過学習できるか確認
- 学習率を慎重に: 大きすぎず小さすぎず(学習曲線を見て調整)
- 早期終了を使用: 検証損失が改善しなくなったら停止
- チェックポイント保存: 最良のモデルを保存
デバッグのコツ
よくある問題
- 損失がNaN → 学習率を下げる
- 損失が変化しない → 勾配を確認
- 過学習 → 正則化、データ拡張
- 未学習 → モデルを大きくする
デバッグ手順
- データが正しく読み込めているか確認
- モデルの出力形状を確認
- 勾配が流れているか確認
- 損失が減少するか確認
モデルの保存と読み込み
# モデルの保存
torch.save(model.state_dict(), 'model.pth')
# モデルの読み込み
model = MyModel()
model.load_state_dict(torch.load('model.pth'))
model.eval()
# 完全な状態を保存(再開用)
torch.save({
'epoch': epoch,
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': loss,
}, 'checkpoint.pth')
再現性の確保
import torch
import numpy as np
import random
def set_seed(seed=42):
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
set_seed(42)
理解度チェック
Q. 新しいプロジェクトを始めるとき、最初にすべきことは?