
Terdapat tiga poin yang menjadi pembelajaran kita kali ini, yaitu:
- What is TensorFlow Dataset?
- Why use TensorFlow Dataset?
- Demo
API dalam framework TensorFlow yang dirancang untuk merepsentasikan dan memanipulasi data secara efisien untuk tugas machine learning. Selain itu, API ini juga menyediakan pipa input berkinerja tinggi untuk membaca, memproses, dan mentransformasi data, serta memungkinkan integrasi yang mulus dengan model machine learning.
API tf.data.Dataset memungkinkan pembuatan pipa input yang scalable dan dioptimalkan dengan menangani berbagai aspek seperti pengelompokkan (batching), pengacakan (shuffling), prefetching, dan pemuatan data secara paralel. Hal ini memudahkan pelatihan dan evaluasi model pembelajaran mesin pada dataset besar, meningkatkan efisiensi dan kinerja keseluruhan dalam proyek berbasis TensorFlow.
Manfaat Penggunaan TensorFlow Dataset
Optimasi Kinerja
- Pipeline kinerja tinggi untuk membaca, memproses, dan transformasi data secara efisien.
- Memungkinkan pengelompokkan data (batching)dan memungkinkan model memproses beberapa contoh sekaligus.
- Prefetching meminimalkan idle time dan memastikan pasokan data yang konsisten ke GPU atau CPU.
Manipulasi dan Transformasi Data
- Mendukung berbagai operasi seperti mapping, filtering, dan shuffling.
- Terintegrasi baik dengan komponen TensorFlow dan memudahkan langkah-langkah preprocessing yang kompleks.
Keterbacaan dan Kepeliharaan Kode
- Abstraksi low-level data handling, dan meningkatkan kekompakkan serta keterbacaan kode.
- Menyederhanakan penambahan dataset yang beragam ke dalam alur kerja pembelajaran mesin.
Skalabilitas dan Dukungan Dataset Besar
- Scalable untuk menangani dataset besar dengan efisien.
- Mendukung pemuatan data secara paralel dan memanfaatkan arsitektur multi-core untuk pemrosesan yang lebih cepat.
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds
Dataset yang tersedia di TensorFlow
Semua builder dataset adalah turunan dari tfds.core.DatasetBuilder. Untuk mendapatkan daftar builder yang tersedia, kita gunakan tfds.list_builders() melihat pada katalog dataset.
tfds.list_builders()
Membangun end to end Pipeline
#1 Build input pipeline
Terdapat dua cara untuk membangun dataset:
- Sebuah data source membangun Dataset dari data yang tersimpan di dalam sebuah memori atau lebih.
- Data transformation membangun dataset dari satu atau lebih objek tf.data.Dataset.
Load Dataset
Selanjutnya, kita akan menggunakan data MNIST:
- shuffle_files=True : data MNIST hanya disimpan dalam satu file, tetapi untuk dataset yang lebih besar disimpan dengan beberapa file di disk. Praktik yang baik adalah untuk mengacaknya saat training.
- as_supervised=True: mengembalikan tuple (img, label).
[ds_train, ds_test], ds_info = tfds.load('mnist', split=['train', 'test'], shuffle_files=True, as_supervised=True, with_info=True)
Lalu kita terapkan transformasi berikut:
- tf.data.Dataset.map: TFDS menyediakan gambar dengan tipe tf.uint8, sementara model mengharapkan tipe tf.float32. Oleh sebab itu, kita perlu menormalisasikan gambar.
- tf.data.Dataset.cache: Saat dataset termuat ke dalam memori, kita simpan di cache sebelum diacak agar kinerja lebih baik. Catatan: transformasi acak harus diterapkan setelah penyimpanan di cache.
- tf.data.Dataset.shuffle: untuk keacakan permanen, kita atur buffer pengacakan sebesar ukuran dataset penuh. Catatan: untuk dataset besar yang tidak muat dalam memori, kita gunakan buffer_size=1000 jika sistem mendukung.
- tf.data.Dataset.batch: menggabungkan elemen dataset setelah diacak untuk mendapatkan batch unik pada setiap epoch.
- tf.data.Dataset.preferch: praktek yang baik untuk mengakhiri data pipe dengan prefetching.
Training set
def normalize_img(image, label):
'''Normalize images: 'uint8' to 'float32' '''
return tf.cast(image, tf.float32) / 255., labelds_train = ds_train.map(normalize_img, num_parallel_calls=tf.data.AUTOTUNE)
ds_train = ds_train.cache()
ds_train = ds_train.shuffle(ds_info.splits['train'].num_examples)
ds_train = ds_train.batch(128)
ds_train = ds_train.prefetch(tf.data.AUTOTUNE)
Evaluation set
data pipeline testing mirip dengan data pipeline training, hanya terdapat perbedaan kecil:
- Kita tidak perlu memanggil tf.data.Dataset.shuffle
- Penyimpanan di cache dilakukan setelah pengelompokkan karena batch dapat sama antara epoch.
ds_train = ds_train.map(normalize_img, num_parallel_calls=tf.data.AUTOTUNE)
ds_train = ds_train.batch(128)
ds_train = ds_train.cache()
ds_train = ds_train.prefetch(tf.data.AUTOTUNE)
#2 Build and train the model
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(256, activation='relu'), #increased the number of neurons for better representation
tf.keras.layers.Dropout(0.5), #added dropout for regularization
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.5), #added dropout for regularization
tf.keras.layers.Dense(10)
])#Compile the optimized model
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), #Explicitly set learning rate
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=[tf.keras.metrics.SParseCategoricalAccuracy()]
)
model.fit( ds_train, epochs=6, validation_data=ds_test)
Output:
Learn More via myskill.id/course/tensorflow-dataset
Be the first to comment