บทนำ
tf.data.Dataset ให้การควบคุม input pipeline ลึกกว่า keras.preprocessing: shuffle, batch, prefetch, custom transforms
โค้ดตัวอย่าง
print("Defining customized input pipeline")
list_ds = tf.data.Dataset.list_files(str(data_dir/'*/*'), shuffle=False)
list_ds = list_ds.shuffle(image_count, reshuffle_each_iteration=False)
for f in list_ds.take(5):
print(f.numpy())
class_names = np.array(sorted([item.name for item in data_dir.glob('*') if item.name != "LICENSE.txt"]))
print(class_names)
print("The dataset is split into training and validation set")
val_size = int(image_count * 0.2)
train_ds = list_ds.skip(val_size)
val_ds = list_ds.take(val_size)
print("Length of each subset is displayed below")
print(tf.data.experimental.cardinality(train_ds).numpy())
print(tf.data.experimental.cardinality(val_ds).numpy())ผลลัพธ์
Defining customized input pipeline b'/root/.keras/datasets/flower_photos/dandelion/14306875733_61d71c64c0_n.jpg' b'/root/.keras/datasets/flower_photos/dandelion/8935477500_89f22cca03_n.jpg' b'/root/.keras/datasets/flower_photos/sunflowers/3001531316_efae24d37d_n.jpg' b'/root/.keras/datasets/flower_photos/daisy/7133935763_82b17c8e1b_n.jpg' b'/root/.keras/datasets/flower_photos/tulips/17844723633_da85357fe3.jpg' ['daisy' 'dandelion' 'roses' 'sunflowers' 'tulips'] The dataset is split into training and validation set Length of each subset is displayed below 2936 734
คำอธิบาย
list_files(pattern): สร้าง dataset ของ file paths (glob pattern)shuffle(buffer_size, reshuffle_each_iteration=False): สลับครั้งเดียว (fixed split)- สร้าง class_names จากโฟลเดอร์ย่อย (exclude LICENSE.txt)
- Split:
skip(val_size)= train,take(val_size)= val (80/20) cardinality(): นับจำนวน elements ใน dataset
ข้อได้เปรียบของ tf.data
- ควบคุม shuffle buffer, batch size, prefetch เอง
- Chain transforms ได้ (map, filter, interleave)
- รองรับ distributed training, TPU, multiple workers
- Performance tuning ลึก (cache, prefetch, parallel map)