tf.data.Datasetによるデータセット作成

TensorFlowにおけるデータ前処理とパイプラインの構築において、tf.data.Datasetは中心的な役割を担うAPIです。このAPIは、大規模なデータセットを効率的かつ柔軟に処理し、モデルに入力するデータのパイプラインを構築するために使用されます。


1 tf.data.Datasetとは

tf.data.Datasetは、テンソルのシーケンス(例:画像やラベルのペア)を扱うための抽象クラスで、以下のような特徴を持ちます:

  • データの読み込み、変換、バッチ処理などを効率よく行える。

  • パイプライン処理が関数型の連鎖で表現できる。

  • GPUやTPUなどの高速なハードウェアに最適化可能。


2 主なデータセットの作成方法

① Pythonのデータ構造から作成

python
import tensorflow as tf # Pythonリストからデータセットを作成 data = [1, 2, 3, 4, 5] dataset = tf.data.Dataset.from_tensor_slices(data)
  • from_tensor_slicesは、リストやNumPy配列を1要素ずつ取り出すデータセットに変換します。


② ファイル(画像・テキスト)から作成

例:画像ファイルのパスからデータセットを作成

python
file_paths = ["img1.jpg", "img2.jpg", "img3.jpg"] dataset = tf.data.Dataset.from_tensor_slices(file_paths) # 画像を読み込み・前処理 def load_image(path): image = tf.io.read_file(path) image = tf.image.decode_jpeg(image, channels=3) image = tf.image.resize(image, [224, 224]) return image dataset = dataset.map(load_image)

③ CSVファイルなど構造化データから

python
dataset = tf.data.experimental.make_csv_dataset( file_pattern="data.csv", batch_size=32, label_name="label", num_epochs=1, shuffle=True )
  • make_csv_datasetを使うと、CSVファイルから直接ラベル付きデータを読み込めます。


3 パイプラインの構築例

典型的な前処理パイプラインの例:

python
dataset = tf.data.Dataset.from_tensor_slices((images, labels)) # シャッフル dataset = dataset.shuffle(buffer_size=1000) # 前処理 def preprocess(image, label): image = tf.image.resize(image, [128, 128]) image = tf.cast(image, tf.float32) / 255.0 return image, label dataset = dataset.map(preprocess) # バッチ化 dataset = dataset.batch(32) # パフォーマンス最適化 dataset = dataset.prefetch(tf.data.AUTOTUNE)

4 パフォーマンス向上のテクニック

テクニック 説明
.cache() メモリにデータをキャッシュして再利用
.shuffle() データの順序をランダムにして過学習を防止
.batch() データをバッチ単位でまとめて処理
.prefetch() 学習中に次のデータを並行して準備
.map(num_parallel_calls=tf.data.AUTOTUNE) 並列で前処理を実行して高速化

5 まとめ

  • tf.data.Datasetは、TensorFlowのデータ処理の基本単位であり、拡張性・効率性が高い。

  • 様々な形式のデータから柔軟にデータセットを構築でき、モデル学習に最適化された形に加工できる。

  • .map()、.batch()、.shuffle()、.prefetch()などを組み合わせることで、効率的なパイプラインを実現できる。

このAPIを使いこなすことで、データ処理のパフォーマンスと可読性を大幅に向上させることができます。

生成日:2025/05/22