tf.data APIによるデータ読み込みと前処理

TensorFlowのtf.data APIは、大規模なデータセットの効率的な読み込み、変換、前処理のための強力なツールです。このAPIは、機械学習モデルの学習パイプラインを簡潔かつ柔軟に構築するために設計されています。


1 tf.data APIの概要

tf.data APIを使うと、以下のような処理を行うパイプラインを構築できます:

  • データの読み込み(ファイル、メモリ、生成関数などから)

  • データの変換(前処理や拡張など)

  • データのシャッフル、バッチ化、繰り返し処理

  • パフォーマンスの最適化(プリフェッチ、並列処理)

基本的なデータパイプラインは、**tf.data.Dataset**オブジェクトを中心に構成されます。


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

a. メモリ内のデータから

python
import tensorflow as tf data = [1, 2, 3, 4, 5] dataset = tf.data.Dataset.from_tensor_slices(data) for item in dataset: print(item.numpy())

b. ファイルから(例:CSV)

python
file_dataset = tf.data.TextLineDataset("data.csv")

複数ファイルを読み込む場合:

python
files = tf.data.Dataset.list_files("data/*.csv") dataset = files.interleave(tf.data.TextLineDataset, cycle_length=4)

3 前処理・変換(map

データに関数を適用するにはmap()を使います。

python
def preprocess(x): return x * 2 dataset = dataset.map(lambda x: preprocess(x))

4 シャッフル・バッチ化・繰り返し

シャッフル

python
dataset = dataset.shuffle(buffer_size=100)

バッチ化

python
dataset = dataset.batch(batch_size=32)

繰り返し(エポックの指定)

python
dataset = dataset.repeat(count=10)

5 パフォーマンス最適化

プリフェッチ(学習とデータ読み込みの並列化)

python
dataset = dataset.prefetch(tf.data.AUTOTUNE)

これにより、GPUとCPUが効率的に並列動作し、全体の学習速度が向上します。


6 例:画像データセットの読み込みと前処理

python
def process_image(file_path): image = tf.io.read_file(file_path) image = tf.image.decode_jpeg(image, channels=3) image = tf.image.resize(image, [224, 224]) image = image / 255.0 # 正規化 return image files = tf.data.Dataset.list_files("images/*.jpg") dataset = files.map(process_image) dataset = dataset.shuffle(100).batch(32).prefetch(tf.data.AUTOTUNE)

まとめ

tf.data APIは、次のような特徴を持っています:

  • 柔軟性が高く、様々なデータ形式に対応可能

  • 大規模データに対しても効率的に動作

  • 並列処理やキャッシュ、プリフェッチなどで高速化可能

このAPIを活用することで、モデル学習の前処理部分を堅牢かつ効率的に構築できます。

生成日:2025/05/21