您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

TensorFlow數(shù)據(jù)讀取機制分析

大?。?/span>0.9 MB 人氣: 2017-09-28 需要積分:3
在學習TensorFlow的過程中,有很多小伙伴反映讀取數(shù)據(jù)這一塊很難理解。確實這一塊官方的教程比較簡略,網(wǎng)上也找不到什么合適的學習材料。今天這篇文章就以圖片的形式,用最簡單的語言,為大家詳細解釋一下TensorFlow的數(shù)據(jù)讀取機制,文章的最后還會給出實戰(zhàn)代碼以供參考。
  TensorFlow讀取機制圖解
  首先需要思考的一個問題是,什么是數(shù)據(jù)讀取?以圖像數(shù)據(jù)為例,讀取數(shù)據(jù)的過程可以用下圖來表示:
  TensorFlow數(shù)據(jù)讀取機制分析
  假設(shè)我們的硬盤中有一個圖片數(shù)據(jù)集0001.jpg,0002.jpg,0003.jpg……我們只需要把它們讀取到內(nèi)存中,然后提供給GPU或是CPU進行計算就可以了。這聽起來很容易,但事實遠沒有那么簡單。事實上,我們必須要把數(shù)據(jù)先讀入后才能進行計算,假設(shè)讀入用時0.1s,計算用時0.9s,那么就意味著每過1s,GPU都會有0.1s無事可做,這就大大降低了運算的效率。
  如何解決這個問題?方法就是將讀入數(shù)據(jù)和計算分別放在兩個線程中,將數(shù)據(jù)讀入內(nèi)存的一個隊列,如下圖所示:
  TensorFlow數(shù)據(jù)讀取機制分析
  讀取線程源源不斷地將文件系統(tǒng)中的圖片讀入到一個內(nèi)存的隊列中,而負責計算的是另一個線程,計算需要數(shù)據(jù)時,直接從內(nèi)存隊列中取就可以了。這樣就可以解決GPU因為IO而空閑的問題!
  而在TensorFlow中,為了方便管理,在內(nèi)存隊列前又添加了一層所謂的“文件名隊列”。
  為什么要添加這一層文件名隊列?我們首先得了解機器學習中的一個概念:epoch。對于一個數(shù)據(jù)集來講,運行一個epoch就是將這個數(shù)據(jù)集中的圖片全部計算一遍。如一個數(shù)據(jù)集中有三張圖片A.jpg、B.jpg、C.jpg,那么跑一個epoch就是指對A、B、C三張圖片都計算了一遍。兩個epoch就是指先對A、B、C各計算一遍,然后再全部計算一遍,也就是說每張圖片都計算了兩遍。
  TensorFlow使用文件名隊列+內(nèi)存隊列雙隊列的形式讀入文件,可以很好地管理epoch。下面我們用圖片的形式來說明這個機制的運行方式。如下圖,還是以數(shù)據(jù)集A.jpg, B.jpg, C.jpg為例,假定我們要跑一個epoch,那么我們就在文件名隊列中把A、B、C各放入一次,并在之后標注隊列結(jié)束。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?