PyTorch基礎クイズ
Step 2 で学んだ PyTorch の基礎知識を確認しましょう。
Q1. Tensor と自動微分
以下のコードの実行結果として正しいものはどれですか?
x = torch.tensor(2.0, requires_grad=True)
y = x ** 3
y.backward()
print(x.grad)
- A:
tensor(2.0) - B:
tensor(8.0) - C:
tensor(12.0) - D:
tensor(6.0)
正解: C
解説: y = x^3 の導関数は dy/dx = 3x^2 です。x = 2.0 のとき 3 * 2^2 = 12.0 となります。
Q2. DataLoader
学習時の DataLoader 設定として最も適切な組み合わせはどれですか?
- A:
shuffle=False, drop_last=False - B:
shuffle=True, drop_last=True - C:
shuffle=True, drop_last=False - D:
shuffle=False, drop_last=True
正解: B
解説: 学習時は各エポックでデータの順序を変えるために shuffle=True にし、BatchNorm を使う場合は最後の不完全なバッチ(サイズ1になりうる)を避けるために drop_last=True にするのが望ましいです。
Q3. model.train() と model.eval()
model.eval() に切り替えたときの挙動として正しいものはどれですか?
- A: モデルのパラメータが凍結され、更新されなくなる
- B: Dropout が無効化され、BatchNorm が学習済み統計量を使用する
- C: 勾配計算が自動的に無効化される
- D: モデルが GPU から CPU に移動する
正解: B
解説: model.eval() は Dropout を無効化し(すべてのニューロンを使用)、BatchNorm がバッチ統計量ではなく学習時に蓄積した移動平均を使用するようにします。勾配計算の無効化には別途 torch.no_grad() が必要です。
Q4. 損失関数
NetShop の商品画像を10カテゴリに分類する際に使用すべき PyTorch の損失関数はどれですか?
- A:
nn.BCEWithLogitsLoss() - B:
nn.CrossEntropyLoss() - C:
nn.MSELoss() - D:
nn.L1Loss()
正解: B
解説: 多クラス分類には nn.CrossEntropyLoss() を使います。この関数は内部で Softmax を含んでいるため、モデルの出力層に Softmax を追加する必要はありません。nn.BCEWithLogitsLoss() は二値分類用です。
Q5. Early Stopping
Early Stopping を実装する際に、検証損失が改善しなくなったらベストモデルを復元する理由はどれですか?
- A: 学習時間を短縮するため
- B: 過学習が進む前の最も汎化性能が高い状態に戻すため
- C: GPU メモリを節約するため
- D: 学習データの損失を最小化するため
正解: B
解説: 学習を続けると検証損失が上昇し始める(過学習)場合があります。Early Stopping は検証損失が最小だった時点のモデルパラメータを保存し、学習停止時にそのパラメータを復元することで、最も汎化性能が高い状態のモデルを使用できます。
結果
5問中の正解数を確認してください。
- 5問正解: 素晴らしい!Step 3 に進みましょう。
- 4問正解: 合格です。間違えた問題を復習してから次へ進みましょう。
- 3問以下: Step 2 のレッスンを再度読み直してから、もう一度挑戦しましょう。
推定所要時間: 30分