Apa itu format TFRecordDataset
apa itu format TFRecordDataset – merupakan format binary khusus untuk tensorflow, didalam TF Record Dataset akan terdiri dari description (biasanya untuk sharing antar bahasa menggunakan format protobuffer)
Sesuai penjelasan dari https://www.tensorflow.org/api_docs/python/tf/data/TFRecordDataset (kalian gunakan Tensorflow 2.0 keatas ya!)
TF Record Dataset menggunakan parsing dan decoding yang dimiliknya sendiri! Itu artinya kalian wajib melakukan deklarasi untuk melakukan encoding/decoding. Dalam kasus tertentu yang mellibatkan banyak binary file seperti format gambar, serta array dalam bentuk numpy perlu mekanisme tertentu agar bisa dimasukan kedalam TF Record Dataset.
Membuat Encoding
Misalkan kita akan menyimpan 2 buah variabel dari hasil bilangan random
import tensorflow as tf import numpy example_path = "dataset.tfrecords" with tf.io.TFRecordWriter(example_path) as file_writer: for _ in range(4): x, y = numpy.random.random(), numpy.random.random() record_bytes = tf.train.Example(features=tf.train.Features(feature={ "x": tf.train.Feature(float_list=tf.train.FloatList(value=[x])), "y": tf.train.Feature(float_list=tf.train.FloatList(value=[y])), })).SerializeToString() file_writer.write(record_bytes)
Perhatikan tuple dari record_bytes itu merupakan deklarasi untuk melakukan encoding
Membuat Decoding
Kebalikand dari encoding yaitu decoding atau melakukan parsing data, dibutuhkan mekanisme tertentu karena menganut decoding on its own alias decoding tiap file dimiliki sendiri sehingga dibutuhkan deklarasinya atau biasa disebut dengan schema
def decode_fn(record_bytes): return tf.io.parse_single_example( # Data record_bytes, # Schema {"x": tf.io.FixedLenFeature([], dtype=tf.float32), "y": tf.io.FixedLenFeature([], dtype=tf.float32)} )
Kita bisa panggil sebagai list berikut
for batch in tf.data.TFRecordDataset([example_path]).map(decode_fn): print("x = {x:.4f}, y = {y:.4f}".format(**batch))
hasil
x = 0.2370, y = 0.0563 x = 0.4697, y = 0.7421 x = 0.7395, y = 0.6536 x = 0.1981, y = 0.2367
Format TF Records Dataset biasa kalian temui ketika bekerja dengan tensorflow_dataset https://github.com/tensorflow/datasets. ketika kalian memanggil perintah
ds = tfds.load('mnist', split='train', as_supervised=True, shuffle_files=True)
Maka akan secara otomatis akan mendownload file tfrecord yang disimpan dalam directory active user, misalkan dalam komputer saya akan disimpan di C:\Users\User\tensorflow_datasets\mnist\3.0.1
Untuk mendapatkan schema nya kalian bisa baca features.json seperti berikut isinya
{ "type": "tensorflow_datasets.core.features.features_dict.FeaturesDict", "content": { "image": { "type": "tensorflow_datasets.core.features.image_feature.Image", "content": { "shape": [ 28, 28, 1 ], "dtype": "uint8", "encoding_format": null, "use_colormap": false } }, "label": { "type": "tensorflow_datasets.core.features.class_label_feature.ClassLabel", "content": { "num_classes": 10 } } } }
Tensorflow mempunyai begitu banyak dataset yang telah dikumpulkan menjadi bagian utuh agar para developer lebih fokus ke algoritma tanpa dipusingkan dengan dataset https://www.tensorflow.org/datasets. Salah satu contoh penerapan encoding dan decoding bisa kalian temui disini, jadi jangan bingung mengenai format Proto Buffer, annotation image, ubyte dalam menggunakan tensorflow karena format dataset sangat begitu banyak sekali