昨天介紹了如何產生 tfrecord,今天要介紹的當然就是如何讀取 tfrecord啦!
上次我們將每個人的資料都包成一個 example 後塞入 record,所以反過來說,讀取的話,我們也是以一個 example 為單位去讀取 tfrecord,第一步就是先呼叫 iterator。
record_iterator = tf.python_io.tf_record_iterator(path=TFRECORD_PATH)
有了 record_iterator,我們就可以透過 for 迴圈將資料讀出,tf.train.Example 中有一個 ParseFromString 的方法,可以將 tf_record 反序列化回來,這時的 example 就會是類似 dictionary 格式的資料。
for tf_record in record_iterator:
example = tf.train.Example()
example.ParseFromString(tf_record)
還記得我們說,被存成 example 的資料中,裡面的 features 必須以 list 格式包起來嗎?這次解析時也一樣,因此我們定義了幾個方法,用來簡化解析時要不要在程式碼加或不加[]的問題。
def get_int64(example, key):
return example.features.feature[key].int64_list.value[0]
def get_int64_list(example, key):
return example.features.feature[key].int64_list.value
def get_bytes(example, key):
return example.features.feature[key].bytes_list.value[0]
def get_float(example, key):
return example.features.feature[key].float_list.value[0]
定義方法後,就可以來解析資料啦!我們用上述的方法取得名稱,年齡等文字資訊,圖片的話,這邊用 write file 的方法,將大頭照存至檔案。
讀取 tfrecord 不難吧!