68 Views

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

Leave a Reply