tensorflow之並行讀入數據

2021-02-19 深度學習科研平臺

最近研究了一下並行讀入數據的方式,現在將自己的理解整理如下,理解比較淺,僅供參考。

並行讀入數據主要分

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極速入門
    首先是一些基礎概念,包括計算圖,graph 與 session,基礎數據結構,Variable,placeholder 與 feed_dict 以及使用它們時需要注意的點。最後給出了在 tensorflow 中建立一個機器學習模型步驟,並用一個手寫數字識別的例子進行演示。1、tensorflow是什麼?te
  • tensorflow極速入門
    首先是一些基礎概念,包括計算圖,graph 與 session,基礎數據結構,Variable,placeholder 與 feed_dict 以及使用它們時需要注意的點。最後給出了在 tensorflow 中建立一個機器學習模型步驟,並用一個手寫數字識別的例子進行演示。1、 tensorflow是什麼?
  • TensorFlow 安裝詳解
    這些數據「線」可以輸運「size可動態調整」的多維數據數組,即「張量」(tensor)。張量從圖中流過的直觀圖像是這個工具取名為「Tensorflow」的原因。一旦輸入端的所有張量準備好,節點將被分配到各種計算設備完成異步並行地執行運算。TensorFlow 能做什麼?上面也說了,用於數值計算。
  • tensorflow的數據輸入
    tensorflow有兩種數據輸入方法,比較簡單的一種是使用feed_dict,這種方法在畫graph的時候使用placeholder來站位,在真正
  • 乾貨| TensorFlow的數據流圖
    TensorFlow是一個開源軟體庫,用於使用數據流圖進行數值計算。圖中的節點表示數學運算,而圖邊表示在它們之間傳遞的多維數據數組(張量,tensor)。該庫包括各種功能,使你能夠實現和探索用於圖像和文本處理的前沿卷積神經網絡(CNN)和循環神經網絡(RNN)架構。
  • TensorFlow圖像分類教程
    TensorFlow計算步驟是並行的,可對其配置進行逐幀視頻分析,也可對其擴展進行時間感知視頻分析。本系列文章直接切入關鍵的部分,只需要對命令行和Python有最基本的了解,就可以在家快速地創建一些令你激動不已的項目。本文不會深入探討TensorFlow的工作原理,如果你想了解更多,我會提供大量額外的參考資料。本系列所有的庫和工具都是免費開源的軟體。
  • 數據載入過慢?這裡有一份TensorFlow加速指南
    使用Numpy這是常用的一個方法,把一個numpy數組輸入到tensorflow中:# create a random vector of shape (100,2)x = np.random.sample((100,2))# make a dataset from a numpy arraydataset = tf.data.Dataset.from_tensor_slices
  • 基於TensorFlow的深度學習實戰
    為了將環境建在 ~/tensorflow 目錄下, 執行:$ virtualenv --system-site-packages ~/tensorflow接下來激活virtualenv:$ source ~/tensorflow/bin/activate #  with bash $ source ~/tensorflow/bin/activate.csh
  • Tensorflow之 CNN卷積神經網絡的MNIST手寫數字識別
    故本人對更新後文檔進行翻譯工作,紕漏之處請大家指正。(如需了解其他方面知識,可參閱以下Tensorflow系列文章)。TensorFlow是一個非常強大的用來做大規模數值計算的庫。其所擅長的任務之一就是實現以及訓練深度神經網絡。在本教程中,通過為MNIST構建一個深度卷積神經網絡的分類器,我們將學到構建一個TensorFlow模型的基本步驟。
  • TensorFlow應用實戰 | TensorFlow基礎知識
    # -*- coding: UTF-8 -*-# 引入tensorflowimport tensorflow as tf# 設置了gpu加速提示信息太多了,設置日誌等級屏蔽一些import osos.environ['TF_CPP_MIN_LOG_LEVEL']='2'# 創建兩個常量 Tensor.第一個為
  • TensorFlow與中文手寫漢字識別
    trick,在實際項目當中有很大的好處, 比如絕對不要一次讀入所有的 的數據到內存(儘管在Mnist這類級別的例子上經常出現)…最開始看到是這篇blog裡面的TensorFlow練習22: 手寫漢字識別(http://blog.topspeedsnail.com/archives/10897), 但是這篇文章只用了140訓練與測試,試了下代碼 很快,但是當擴展到所有的時,發現32g的內存都不夠用
  • TensorFlow發布JavaScript開發者的機器學習框架TensorFlow.js
    發布新的 TensorFlow 官方博客(http://blog.tensorflow.org/)與 TensorFlow YouTube 頻道;2. 面向 JavaScript 開發者的全新機器學習框架 TensorFlow.js;3.
  • TensorFlow 與中文手寫漢字識別
    到Inference,是一個比較基本的Example, 從一個基本的任務學習如果在TensorFlow下做高效地圖像讀取,基本的圖像處理,整個項目很簡單,但其中有一些trick,在實際項目當中有很大的好處, 比如絕對不要一次讀入所有的 的數據到內存(儘管在Mnist這類級別的例子上經常出現)…最開始看到是這篇blog裡面的TensorFlow練習22: 手寫漢字識別(http://blog.topspeedsnail.com
  • python應用之基於tensorflow的數據擬合:深度學習之預測入門篇
    實驗目的:1、了解python在深度學習領域的應用2、學習安裝python第三方依賴庫實驗環境:已正確安裝python3.5以及依賴庫tensorflow、matplotlib預測過程展示:1、應用領域
  • Anaconda軟體安裝TensorFlow教程
    Anaconda軟體的安裝,請閱讀文章《Anaconda軟體安裝和簡易使用教程》第一步:創建r-tensorflow環境打開Anaconda Prompt,執行命令conda create --name r-tensorflow python=3.6該命令用來創建r-tensorflow虛擬環境
  • 【技術茶話會】如何在電腦上搭建 tensorflow 環境
    TensorFlow 是一個由谷歌開發和維護的基於數據流編程的符號數學系統,被廣泛應用於各類機器學習,完成版的支持 c 和 python 語言,但機器學習模塊大多使用 python 語言編寫,下面來介紹一下如何在自己的筆記本電腦上搭建 python 語言的 tensorflow 環境。
  • tensorflow機器學習模型的跨平臺上線
    生成的模型,但是由於tensorflow模型往往較大,使用無法優化的PMML文件大多數時候很笨拙,因此本文我們專門討論下tensorflow機器學習模型的跨平臺上線的方法。tensorflow模型的跨平臺上線的備選方案tensorflow模型的跨平臺上線的備選方案一般有三種:即PMML方式,tensorflow serving方式,以及跨語言API方式。PMML方式的主要思路在上一篇以及講過。
  • Windows配置tensorflow開發環境
    通過這篇文章,希望能夠幫助大家更加順利地配置tensorflow的開發環境。4、測試tensorflow是否可用可通過兩種方式測試tensorflow:(1)通過Anaconda Prompt窗口:首先,激活tensorflow環境。
  • tensorflow2.x入門(二)
    指數衰減學習率 = 初始學習率 * 學習率衰減率**(當前輪數/多少輪衰減一次)import tensorflow as tfw = tf.Variable(tf.constant(5, dtype=tf.float32
  • 小叮噹機器學習:Python3.6配置TensorFlow的GPU版詳細安裝教程
    隨著機器學習,神經網絡的搭建,我們對海量數據的處理需求越來越大。雖然,CPU的發展速度已經放緩,但並行處理的架構卻取得了爆炸式的發展。圖形處理單元(GPU)的大量運用,已經拉開了機器學習迅猛發展的序幕。