前言
tensorflow提供了多種讀寫方式,我們最常見的就是使用tf.placeholder()這種方法,使用這個方法需要我們提前處理好數據格式,不過這種處理方法也有缺陷:不便于存儲和不利于分布式處理,因此,TensorFlow提供了一個標準的讀寫格式和存儲協議,不僅如此,TensorFlow也提供了基于多線程隊列的讀取方式,高效而簡潔,讀取速度也更快,據一個博主說速度能提高10倍,相當的誘人.【下面的實驗均是在tensorflow1.0的環境下進行】
tensorflow的example解析
example協議
在TensorFlow官方github文檔里面,有個example.proto的文件,這個文件詳細說明了TensorFlow里面的example協議,下面我將簡要敘述一下。
tensorflow的example包含的是基于key-value對的存儲方法,其中key是一個字符串,其映射到的是feature信息,feature包含三種類型:
BytesList:字符串列表
FloatList:浮點數列表
Int64List:64位整數列表
以上三種類型都是列表類型,意味著都能夠進行拓展,但是也是因為這種彈性格式,所以在解析的時候,需要制定解析參數,這個稍后會講。
在TensorFlow中,example是按照行讀的,這個需要時刻記住,比如存儲 矩陣,使用ByteList存儲的話,需要
大小的列表,按照每一行的讀取方式存放。
tf.tain.example
官方給了一個example的例子:
An Example for a movie recommendation application: features { feature { key: "age" value { float_list { value: 29.0 }} } feature { key: "movie" value { bytes_list { value: "The Shawshank Redemption" value: "Fight Club" }} } feature { key: "movie_ratings" value { float_list { value: 9.0 value: 9.7 }} } feature { key: "suggestion" value { bytes_list { value: "Inception" }} }
上面的例子中包含一個features,features里面包含一些feature,和之前說的一樣,每個feature都是由鍵值對組成的,其key是一個字符串,其value是上面提到的三種類型之一。
Example中有幾個一致性規則需要注意:
如果一個example的feature K 的數據類型是 TT,那么所有其他的所有feature K都應該是這個數據類型
feature K 的value list的item個數可能在不同的example中是不一樣多的,這個取決于你的需求
如果在一個example中沒有feature k,那么如果在解析的時候指定一個默認值的話,那么將會返回一個默認值
如果一個feature k 不包含任何的value值,那么將會返回一個空的tensor而不是默認值
tf.train.SequenceExample
sequence_example表示的是一個或者多個sequences,同時還包括上下文context,其中,context表示的是feature_lists的總體特征,如數據集的長度等,feature_list包含一個key,一個value,value表示的是features集合(feature_lists),同樣,官方源碼也給出了sequence_example的例子:
新聞熱點
疑難解答