ベストプラクティス

学習目標: ディープラーニングプロジェクトを成功させるための実践的な知見を学ぶ

データの準備

  • データの品質確認: 欠損値、外れ値、ラベルの誤りをチェック
  • 適切な分割: train/val/testの比率は70/15/15または80/10/10
  • 正規化: 入力データを0-1または標準化(平均0、分散1)
  • データ拡張: 訓練データが少ない場合は必須

モデル設計

  • シンプルから始める: 複雑なモデルは後から
  • 既存アーキテクチャを参考に: ResNet, VGGなど実績のある構造を使う
  • BatchNormを活用: 学習を安定させ、収束を早める
  • 適切な初期化: Xavier, He初期化を使用

学習プロセス

  • 小さなデータで動作確認: まず100サンプルで過学習できるか確認
  • 学習率を慎重に: 大きすぎず小さすぎず(学習曲線を見て調整)
  • 早期終了を使用: 検証損失が改善しなくなったら停止
  • チェックポイント保存: 最良のモデルを保存

デバッグのコツ

よくある問題
  • 損失がNaN → 学習率を下げる
  • 損失が変化しない → 勾配を確認
  • 過学習 → 正則化、データ拡張
  • 未学習 → モデルを大きくする
デバッグ手順
  1. データが正しく読み込めているか確認
  2. モデルの出力形状を確認
  3. 勾配が流れているか確認
  4. 損失が減少するか確認

モデルの保存と読み込み

# モデルの保存
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. 新しいプロジェクトを始めるとき、最初にすべきことは?