您好,登錄后才能下訂單哦!
最近研究了一下并行讀入數據的方式,現在將自己的理解整理如下,理解比較淺,僅供參考。
并行讀入數據主要分
1. 創建文件名列表
2. 創建文件名隊列
3. 創建Reader和Decoder
4. 創建樣例列表
5. 創建批列表(讀取時可要可不要,一般情況下樣例列表可以執行讀取數據操作,但是在實際訓練的時候往往需要批列表來分批進行數據的組織,提取)
其具體流程如下:
一、 文件名列表:
文件名列表是一個list類型的數據,里面的內容是需要用的數據文件名。可以使用常規的python語法入:[file1, file2]。也可以使用tf.train.match_filename_once方法通過匹配輸入。
二、文件名隊列
一般使用tf.train.string_input_producer的方法創建文件名隊列。該方法傳入的是一個文件名列表,輸出的是一個先進先出隊列。在該方法中存在兩個重要參數,num_epochs和shuffle。num_epochs表示列表遍歷的次數,主要是由于有時候訓練模型需要反復的遍歷數據集便于更新模型參數,默認情況下是None(循環遍歷)。shuffle表示是否隨機遍歷,默認情況下是true,表示數據會隨機輸入隊列,當想順序讀入數據時shuffle設置為false。至于其他的capacity表示列表的容量,shared_name表示共享時的名字。
三、Reader和Decoder
Reader的功能是讀取數據記錄,Decoder的功能是將數據的記錄轉化為張量格式。在使用時需要先創建輸入數據文件對應的Reader,然后從文件名隊列中取出文件名,在調用Reader.read的方法返回一個類似于(輸入文件名,數據記錄)的元組。最后使用Decoder方法將每一列數據都轉化為張量的形式。
四、批隊列
批隊列可以在構建圖之前事先構建好,樣例隊列需要在圖中直接產生不用直接預定義。所以先介紹批隊列的構建方式。批隊列主要是樣例打包聚集成批數據,能供模型訓練使用。一般是使用tf.train.shuffle_batch和tf.train.batch的方法構建。可以控制批的大小(一次性讀入的 數據大小),線程個數,然后在圖中直接調用。
五、樣例隊列
樣例隊列的創建方式是隱式的,一般在圖中為了計算任務順利的輸入數據,我們一般使用tf.train.start_queue_runners方法啟動所有的入隊操作所需的線程,此時會自動執行所有的文件名入隊操作和文件名隊列的操作,執行樣例隊列入隊和樣例隊列的操作。這些都是在后臺產生的。
六、線程協調器
并行讀取數據離不開多線程操作,多線程操作離不開線程調節器。tensorflow使用tf.train.Coordinatior方法創建管理多線程生命周期的調節器。調節器的工作原理比較簡單,它監控Tensoflow后臺的所有線程,當某一個線程出現異常時,它的should_stop方法返回true,最后調用request_stop終止所有的線程。但是要注意我們在使用線程調節器之前一定要調用tf.local_variables_initializer方法進行初始化。
七、讀入數據類型
tensorflow讀入的數據類型可以使csv,TFRecord和自由格式文件。CSV的讀取直接調用tf.TextLineReader構建Reader,再調用tf.decoder_csv的方法對文件進行解碼變為張量。
TFRecoder是tensorflow標準的輸入格式,它是通過protocolBuffer構建的存儲數據記錄的結構。該數據結構分明,一個樣例中包含一組特征Features,一個Features又包含多個特征向量feature。其在讀取的時候主要使用tf.TFRecoderReader的方法構建Reader,在使用read的方法讀出元組。接著對元組中的value采用tf.parse_single_example()方法進行解析。再解析的時候需要傳入features參數,該參數要和構造該文件時輸入的字典型變量保持一致(key,value)。key和輸入的key一致,value是一個表示該key對應的維度和類型的定西,用tf.FixedLenFeature函數構造,該函數傳入參數表示特征形狀和特征值的類型。具體如下:
自由格式是指用戶自定義的二進制文件,他存儲的對象是字符串,每條記錄都是一個固定長度的字節塊。再讀入的時候首先要使用tf.FixedLengthRecoderReader的方法讀取對應的二進制文件,然后使用tf.decode_raw的方法將字符串轉化為uint8類型的張量。
八、整體代碼
具體的相關碼如下:
以上這篇tensorflow之并行讀入數據詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。