メインコンテンツへスキップ

A.8 学習が止まったときのレスキュー

学習の詰まりを切り分けるマップ

最小再現と質問のフローチャート

詰まったら、「自分には無理」ではなく「どこで失敗しているかを探せる」に変えます。

まず問題を分類する

症状ありそうな問題最初の動き
ModuleNotFoundError環境違い、または依存関係不足Python と pip の場所を確認
ファイルが見つからない作業ディレクトリや相対パスの問題Path.cwd() を出力
コードは動くが結果が変入力、ラベル、評価指標の問題サンプルと中間値を出力
学習が改善しないデータ、loss、学習率、ラベル形式の問題小さなデータに過学習できるか試す
GPU メモリ不足batch、入力、モデルが大きすぎるまず batch size を下げる
プロジェクトが大きすぎる最小閉ループがない1 入力、1 処理、1 出力にする

まず実行する確認

python --version
which python
pip --version
pip list
pwd
ls

NVIDIA GPU を使う場合:

nvidia-smi

パス問題はこう確認します。

from pathlib import Path

print(Path.cwd())
print(Path("data").exists())

期待される出力:

現在のフォルダは環境によって変わりますが、形は次のようになります。

/your/current/project
False

この順番でデバッグする

  1. 最初の 2 件の入力とラベルを出す。
  2. shape、長さ、値の範囲を出す。
  3. モデルに入る前の中間結果を 1 つ出す。
  4. 評価指標を計算する前のモデル出力を 1 つ出す。
  5. モデルやパラメータを変えるのは最後にする。

最小確認例:

texts = ["refund request", "invoice copy", "shipping delay"]
labels = ["support", "billing", "support"]

print("samples:", len(texts))
print("first texts:", texts[:2])
print("first labels:", labels[:2])
print("label set:", sorted(set(labels)))

期待される出力:

samples: 3
first texts: ['refund request', 'invoice copy']
first labels: ['support', 'billing']
label set: ['billing', 'support']

助けを求めるときの形

やっていること:
期待した結果:
実際に起きたこと:
エラー全文の最後 20 行:
すでに試したこと:
最小再現コード:

最小再現の習慣

プロジェクトが複雑すぎるときは、まず動くところまで縮めます。

def predict(x):
return x * 2

data = [1, 2, 3]
preds = [predict(x) for x in data]
print(preds)

期待される出力:

[2, 4, 6]

そこへ実際の処理を 1 層ずつ戻します。壊れた層が、調べるべき層です。

止まるか、続けるか

状況よい行動
30 分ほどランダムに直している止まって仮説を書く
コピーしているコマンドの意味を説明できない止まって環境を確認する
1-2 個の明確な仮説があるテストを続ける
次に見るべき結果がわかっている進める