国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

用十張圖詳解TensorFlow數據讀取機制(附代碼)

2020-02-22 23:08:18
字體:
來源:轉載
供稿:網友

在學習TensorFlow的過程中,有很多小伙伴反映讀取數據這一塊很難理解。確實這一塊官方的教程比較簡略,網上也找不到什么合適的學習材料。今天這篇文章就以圖片的形式,用最簡單的語言,為大家詳細解釋一下TensorFlow的數據讀取機制,文章的最后還會給出實戰代碼以供參考。

TensorFlow讀取機制圖解

首先需要思考的一個問題是,什么是數據讀取?以圖像數據為例,讀取數據的過程可以用下圖來表示:

圖片描述

假設我們的硬盤中有一個圖片數據集0001.jpg,0002.jpg,0003.jpg……我們只需要把它們讀取到內存中,然后提供給GPU或是CPU進行計算就可以了。這聽起來很容易,但事實遠沒有那么簡單。事實上,我們必須要把數據先讀入后才能進行計算,假設讀入用時0.1s,計算用時0.9s,那么就意味著每過1s,GPU都會有0.1s無事可做,這就大大降低了運算的效率。

如何解決這個問題?方法就是將讀入數據和計算分別放在兩個線程中,將數據讀入內存的一個隊列,如下圖所示:

圖片描述

讀取線程源源不斷地將文件系統中的圖片讀入到一個內存的隊列中,而負責計算的是另一個線程,計算需要數據時,直接從內存隊列中取就可以了。這樣就可以解決GPU因為IO而空閑的問題!

而在TensorFlow中,為了方便管理,在內存隊列前又添加了一層所謂的“文件名隊列”。

為什么要添加這一層文件名隊列?我們首先得了解機器學習中的一個概念:epoch。對于一個數據集來講,運行一個epoch就是將這個數據集中的圖片全部計算一遍。如一個數據集中有三張圖片A.jpg、B.jpg、C.jpg,那么跑一個epoch就是指對A、B、C三張圖片都計算了一遍。兩個epoch就是指先對A、B、C各計算一遍,然后再全部計算一遍,也就是說每張圖片都計算了兩遍。

TensorFlow使用文件名隊列+內存隊列雙隊列的形式讀入文件,可以很好地管理epoch。下面我們用圖片的形式來說明這個機制的運行方式。如下圖,還是以數據集A.jpg, B.jpg, C.jpg為例,假定我們要跑一個epoch,那么我們就在文件名隊列中把A、B、C各放入一次,并在之后標注隊列結束。

圖片描述

程序運行后,內存隊列首先讀入A(此時A從文件名隊列中出隊):

圖片描述

再依次讀入B和C:

圖片描述

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汉沽区| 宝应县| 巴林右旗| 阿图什市| 迭部县| 定陶县| 临城县| 册亨县| 定兴县| 宝清县| 台州市| 南溪县| 剑川县| 苍梧县| 咸宁市| 乐安县| 和林格尔县| 会理县| 泸定县| 沁源县| 安化县| 嘉兴市| 肇州县| 临邑县| 天气| 太仆寺旗| 白山市| 宣城市| 那坡县| 萨迦县| 易门县| 景洪市| 那坡县| 义马市| 新乡县| 枣强县| 霍州市| 南宁市| 扎鲁特旗| 东港市| 磐安县|