TensorFlow Dataset. Tensorflow Dataset series from Python… | by My Skill | May, 2024


Terdapat tiga poin yang menjadi pembelajaran kita kali ini, yaitu:

  • What is TensorFlow Dataset?
  • Why use TensorFlow Dataset?
  • Demo
Logo TensorFlow. Sumber: TensorFlow.

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:

  1. Sebuah data source membangun Dataset dari data yang tersimpan di dalam sebuah memori atau lebih.
  2. Data transformation membangun dataset dari satu atau lebih objek tf.data.Dataset.

Baca lebih lanjut.

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., label

ds_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



Source link

Be the first to comment

Leave a Reply

Your email address will not be published.


*