PyTorchにおけるデータ処理と前処理の中核を担う仕組みとして、torch.utils.data.Datasetとtorch.utils.data.DataLoaderが提供されています。これらは、機械学習モデルに効率的かつ柔軟にデータを供給するための基本構造です。それぞれの役割と使い方について、詳しく説明します。
1. torch.utils.data.Datasetとは
torch.utils.data.Datasetとは
概要
Datasetは、データセット全体を定義するための抽象クラスです。PyTorchの学習・推論で使用するデータ(画像、テキスト、数値など)をカスタムデータセットとして扱うために、これを継承して独自クラスを実装します。
主な目的
-
データの読み込みロジックを定義する
-
データの前処理(例:正規化、リサイズ、トークナイズなど)を行う
-
各サンプルにアクセスできるようにする
実装すべきメソッド
-
__init__:初期化(パスの保存や前処理の準備) -
__len__:データセットのサイズを返す -
__getitem__:インデックスを指定してデータを1件取得する(学習ループ中に自動的に呼ばれる)
2. torch.utils.data.DataLoaderとは
torch.utils.data.DataLoaderとは
概要
DataLoaderは、Datasetから効率的にデータをバッチ単位で取り出すイテレータです。並列読み込み、シャッフル、バッチ処理などを制御できます。
主な目的
-
バッチ処理の自動化
-
データのシャッフル(ランダムな順序で取得)
-
マルチスレッドによる高速読み込み(
num_workers指定)
基本的な使い方
主な引数
| 引数 | 説明 |
|---|---|
dataset |
対象のDatasetインスタンス |
batch_size |
1回の学習に使うサンプル数 |
shuffle |
各エポックのデータの順序をランダムにする |
num_workers |
データ読み込みに使うプロセス数(CPUを並列活用) |
drop_last |
最後の不完全なバッチを破棄するか(True/False) |
3. 実践的な例(画像分類タスク)
4. まとめ
| 要素 | 機能 |
|---|---|
Dataset |
データの取り出し方・前処理を定義する |
DataLoader |
バッチ化、シャッフル、高速読み出しを提供する |
この2つを適切に使うことで、大規模データでも効率的かつ柔軟に処理を行うことができ、PyTorchでの学習パイプラインが大幅に最適化されます。特にデータのボトルネックを減らす上でnum_workersやpin_memoryの調整も重要なチューニングポイントとなります。
生成日:2025/05/22