適合大量資料I/O的儲存格式: TFRecord簡介與操作教學

Jia-Yau Shiau
AI Blog TW
Published in
11 min readNov 25, 2020

--

在訓練模型的時候,資料輸入的流程直接影響了模型訓練或推理的效率。其中,資料格式 (data format) 相當地影響了I/O的速度,除了更換更高階的固態硬碟外,選擇binary形式的資料格式也是提升I/O效率的方法之一。

在許多binary資料格式中,TFRecord的最大優勢在於支援部分資料的載入 (lazy loading) 與tf.data的讀取支援TFRecord的每一筆資料解碼後都是一個類似Protocol buffers的binary message,包裝的流程相較pickle或HDF都來的繁雜許多,讓許多使用者望而卻步。其實,TFRecord的操作就是將資料一層一層地打包與打開protocal message,並不是非常的困難。

這篇文章會從頭到尾,詳細地介紹各種資料型態儲存到TFRecord的操作,包含基本的純量 (整數、浮點數等),到影像與高維矩陣這些進階卻有高實務需求的資料型態。

Cover made with Canva (小圖來源)

文章難度:★★☆☆☆
閱讀建議: 本篇文章介紹TFRecord,一種儲存大量資料的 binary檔案格式。本篇文章前段介紹檔案格式在 input pipeline的重要性與TFRecord特色,中後段提供在 Python上執行不同資料型態TFRecord讀寫的指南。適合所有程度、對於TFRecord有興趣的讀者。
推薦背景知識: deep learning, image encoding, file system, Tensorflow, HDF, pickle.

TFRecord簡介

在訓練模型的時候,資料輸入的流程直接影響了模型訓練或推理的效率。一般來說,資料會以某種資料格式 (data format),比如說圖片或是文字檔,儲存在檔案系統 (file system) 中,在透過程式讀取建立輸入流程 (input pipeline),送到模型 (model) 之中。

The typical training or inference pipeline

資料格式 (data format)

資料格式相當地影響了I/O的速度,除了更換更高階的固態硬碟外,選擇binary形式的資料格式也是提升I/O效率的方法之一。Python常見的binary檔案格式包含HDF5、pickle與npy,

而TFRecord也是一種binary檔案格式,由Google的Tensorflow團隊開發,遵循Google Protocol

--

--