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


詰まったら、「自分には無理」ではなく「どこで失敗しているかを探せる」に変えます。
まず問題を分類する
Section titled “まず問題を分類する”| 症状 | ありそうな問題 | 最初の動き |
|---|---|---|
ModuleNotFoundError | 環境違い、または依存関係不足 | Python と pip の場所を確認 |
| ファイルが見つからない | 作業ディレクトリや相対パスの問題 | Path.cwd() を出力 |
| コードは動くが結果が変 | 入力、ラベル、評価指標の問題 | サンプルと中間値を出力 |
| 学習が改善しない | データ、loss、学習率、ラベル形式の問題 | 小さなデータに過学習できるか試す |
| GPU メモリ不足 | batch、入力、モデルが大きすぎる | まず batch size を下げる |
| プロジェクトが大きすぎる | 最小閉ループがない | 1 入力、1 処理、1 出力にする |
まず実行する確認
Section titled “まず実行する確認”python --versionwhich pythonpip --versionpip listpwdlsNVIDIA GPU を使う場合:
nvidia-smiパス問題はこう確認します。
from pathlib import Path
print(Path.cwd())print(Path("data").exists())期待される出力:
現在のフォルダは環境によって変わりますが、形は次のようになります。
/your/current/projectFalseこのページを終えたら、この証拠カードを残します。
- 症状
- 正確なエラーメッセージ、コマンド、入力、環境
- 最小再現
- まだ失敗する最小のコードまたはコマンド
- 仮説
- 依存関係、パス、データ、API、モデル、またはブラウザ/runtime の問題
- 次の確認
- 多くの変更をする前に、1つのコマンドかログを確認する
- 期待される成果
- 再現可能なバグメモと、テスト済みの修正または代替策
この順番でデバッグする
Section titled “この順番でデバッグする”- 最初の 2 件の入力とラベルを出す。
- shape、長さ、値の範囲を出す。
- モデルに入る前の中間結果を 1 つ出す。
- 評価指標を計算する前のモデル出力を 1 つ出す。
- モデルやパラメータを変えるのは最後にする。
最小確認例:
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']
助けを求めるときの形
Section titled “助けを求めるときの形”- やっていること
- 未記入
- 期待した結果
- 未記入
- 実際に起きたこと
- 未記入
- エラー全文の最後 20 行
- 未記入
- すでに試したこと
- 未記入
- 最小再現コード
- 未記入
最小再現の習慣
Section titled “最小再現の習慣”プロジェクトが複雑すぎるときは、まず動くところまで縮めます。
def predict(x): return x * 2
data = [1, 2, 3]preds = [predict(x) for x in data]print(preds)期待される出力:
[2, 4, 6]そこへ実際の処理を 1 層ずつ戻します。壊れた層が、調べるべき層です。
止まるか、続けるか
Section titled “止まるか、続けるか”| 状況 | よい行動 |
|---|---|
| 30 分ほどランダムに直している | 止まって仮説を書く |
| コピーしているコマンドの意味を説明できない | 止まって環境を確認する |
| 1-2 個の明確な仮説がある | テストを続ける |
| 次に見るべき結果がわかっている | 進める |