カスタムデータセットの作成

PyTorchにおける「カスタムデータセットの作成」は、独自の形式のデータや特殊な前処理を行いたい場合に重要です。これには、torch.utils.data.Dataset クラスを継承してカスタムクラスを定義する方法が用いられます。


1. 基本的な目的

PyTorchのDatasetクラスを継承して自作のクラスを作成することで、以下のことが可能になります。

  • 独自フォーマットの画像・テキスト・時系列データへの対応

  • 特別な前処理や変換(正規化、トークナイズ、ラベルエンコーディングなど)

  • 大規模データの逐次読み込み(メモリ効率化)


2. カスタムDatasetの構成

カスタムデータセットクラスでは、以下の3つのメソッドを実装します。

(1) __init__(self, ...)

  • データの読み込み準備や前処理設定などを行う

  • ファイルパスの取得や変換クラスの受け取りなど

(2) __len__(self)

  • データの総数を返す(学習の反復回数などに必要)

(3) __getitem__(self, index)

  • 指定されたインデックスのデータとラベル(または出力)を返す

  • 実際の前処理(変換、正規化など)もここで実行


3. 実装例(画像分類の場合)

python
import torch from torch.utils.data import Dataset from PIL import Image import os class CustomImageDataset(Dataset): def __init__(self, image_dir, labels, transform=None): self.image_dir = image_dir self.image_filenames = os.listdir(image_dir) self.labels = labels self.transform = transform def __len__(self): return len(self.image_filenames) def __getitem__(self, idx): img_path = os.path.join(self.image_dir, self.image_filenames[idx]) image = Image.open(img_path).convert("RGB") label = self.labels[idx] if self.transform: image = self.transform(image) return image, label

この例では、

  • image_dir に画像ファイルが保存されていると仮定

  • labels は画像に対応するラベルのリスト

  • transformtorchvision.transformsの処理を渡すことで、画像のリサイズ・テンソル化・正規化などを実現


4. 利用方法

上記のカスタムデータセットは、DataLoaderと組み合わせて使用します。

python
from torchvision import transforms from torch.utils.data import DataLoader transform = transforms.Compose([ transforms.Resize((128, 128)), transforms.ToTensor() ]) dataset = CustomImageDataset(image_dir='data/images', labels=label_list, transform=transform) dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

5. 応用的な内容

カスタムデータセットは以下のような応用にも対応可能です。

  • テキストデータのトークナイズとベクトル化(例: BERTやWord2Vecを利用)

  • 時系列データからのスライディングウィンドウ生成

  • マルチモーダルデータ(画像とテキストの同時入力)への対応

  • 複数ファイル形式(CSV + 画像ファイル)の連携


6. まとめ

項目 内容
基本継承クラス torch.utils.data.Dataset
必須メソッド __init__, __len__, __getitem__
主な用途 独自データの前処理・学習用形式への変換
組み合わせ DataLoaderでバッチ処理、シャッフル等

生成日:2025/05/22