TensorFlow中結構化資料工具Protocol Buffer

tony0087發表於2021-09-09

Protocol Buffer是Google開發的處理結構化資料的工具.


什麼是結構化資料?

假設要記錄一些使用者資訊,每個使用者的資訊中都包括使用者的名字,ID和email地址,那麼每個使用者的資訊可以表示成一下的形式:

name:張三id:12345email:zhangsan@abc.com

這就是一個結構化的資料。是指擁有多種屬性的資料,比如上述擁有三個不同的屬性。

當要將這些結構化的使用者資訊持久化或者進行網路傳輸時,就需要先將它們序列化;所謂序列化就是將結構化的資料變成資料流的形式,簡單來說就是變成字串。如何將結構化的資料序列化,並從結構化之後的資料流中還原出原來的結構化資料,統稱為處理結構化資料,這就是Protocol Buffer解決的主要問題。

Protocol Buffer格式的資料與XML和json格式的資料有著比較大的差別。首先,Protocol Buffer序列化之後得到的資料不是可讀的字串,而是二進位制流;其次,XML或者json格式資料資訊都包含在了序列化之後的資料中,不需要任何其他資訊就能還原資料;但使用Protocol Buffer時需要先定義資料的格式(schema),還原一個序列化之後的資料將需要使用這個定義好的資料格式。

以下是資料格式定義檔案:

message user {
optional string name = 1;
required int32 id = 2;
repeated string email = 3;
}

因為這樣的差別,Protocol Buffer序列化出來的資料要比XML格式的資料小3到10倍,解析時間要快20到100倍。

Protocol Buffer定義資料格式的檔案一般儲存在.proto中。每一個message代表了一類結構化資料,比如這裡的使用者資訊,message裡面定義了每一個屬性的型別和名字,屬性的型別可以布林型,整數型,實數型,字元型這樣的基本型別。也可以是另一個message,Protocol Buffer也定義了一個屬性是必須的(required),還是可選的(optional),或者是可重複的(repeated),在最新的Protocol Buffer3中已經不再支援required型別。

Protocol Buffer是TensorFlow系統中使用到的重要工具,TensorFlow中的資料基本上都是透過Protocol Buffer來組織的,分散式TensorFlow的通訊協議gRPC也是以這個作為基礎的。



作者:富城
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1747/viewspace-2812206/,如需轉載,請註明出處,否則將追究法律責任。

相關文章