本文へスキップ
BecomeCoder

PyTorchコース · 第4章 PyTorch入門 ― 自動微分と訓練ループ · レッスン15

データの供給 ― Dataset と DataLoader

ローカル実施

導入

これまでは小さなデータを一度に全部モデルへ渡していました。しかし実際のデータは数万〜数百万件。全部を一度に扱うのは非効率です。そこで バッチ(小分け) で供給する仕組みが DatasetDataLoader です。

説明

  • バッチ学習:データを例えば32件ずつの塊(ミニバッチ)に分け、塊ごとに更新する。メモリに優しく、学習も安定・高速。
  • Dataset:データ1件を取り出す方法を定義する入れ物。
  • DataLoader:Dataset から自動でバッチを作り、シャッフルもしてくれる供給役。
flowchart LR
  ds["Dataset<br/>全データ(例: 5万件)"] --> dl["DataLoader<br/>32件ずつのバッチに<br/>分割・シャッフル"]
  dl --> loop["各バッチで<br/>zero_grad→…→step"]

コードの型はこうです。

from torch.utils.data import TensorDataset, DataLoader

dataset = TensorDataset(X, Y)                       # 入力と正解を束ねる
loader = DataLoader(dataset, batch_size=32, shuffle=True)

for epoch in range(10):
    for batch_x, batch_y in loader:                 # バッチごとに取り出す
        optimizer.zero_grad()
        loss = criterion(model(batch_x), batch_y)
        loss.backward()
        optimizer.step()

「エポック」(データ全体を1周)の中で、「バッチ」ごとに更新が回る二重ループになります。1エポック=バッチ数ぶんの更新、という関係です。

用語の整理

用語意味
バッチサイズ1回の更新で使うデータ件数(例: 32)
イテレーションバッチ1個ぶんの更新(1回の step)
エポックデータ全体を1周(= 全件 ÷ バッチサイズ 回の更新)

まとめ

  • 大きなデータは バッチ(ミニバッチ) に小分けして学習する。安定・高速・省メモリ。
  • Dataset がデータの取り出し方、DataLoader がバッチ化・シャッフルを担当。
  • ループは「エポック(全周)× バッチ(小分け)」の二重構造になる。