最近研究了一下并行讀入數(shù)據(jù)的方式,現(xiàn)在將自己的理解整理如下,理解比較淺,僅供參考。
并行讀入數(shù)據(jù)主要分
1. 創(chuàng)建文件名列表
2. 創(chuàng)建文件名隊(duì)列
3. 創(chuàng)建Reader和Decoder
4. 創(chuàng)建樣例列表
5. 創(chuàng)建批列表(讀取時可要可不要,一般情況下樣例列表可以執(zhí)行讀取數(shù)據(jù)操作,但是在實(shí)際訓(xùn)練的時候往往需要批列表來分批進(jìn)行數(shù)據(jù)的組織,提?。?/p>
其具體流程如下:
一、 文件名列表:
文件名列表是一個list類型的數(shù)據(jù),里面的內(nèi)容是需要用的數(shù)據(jù)文件名。可以使用常規(guī)的python語法入:[file1, file2]。也可以使用tf.train.match_filename_once方法通過匹配輸入。
二、文件名隊(duì)列
一般使用tf.train.string_input_producer的方法創(chuàng)建文件名隊(duì)列。該方法傳入的是一個文件名列表,輸出的是一個先進(jìn)先出隊(duì)列。在該方法中存在兩個重要參數(shù),num_epochs和shuffle。num_epochs表示列表遍歷的次數(shù),主要是由于有時候訓(xùn)練模型需要反復(fù)的遍歷數(shù)據(jù)集便于更新模型參數(shù),默認(rèn)情況下是None(循環(huán)遍歷)。shuffle表示是否隨機(jī)遍歷,默認(rèn)情況下是true,表示數(shù)據(jù)會隨機(jī)輸入隊(duì)列,當(dāng)想順序讀入數(shù)據(jù)時shuffle設(shè)置為false。至于其他的capacity表示列表的容量,shared_name表示共享時的名字。
三、Reader和Decoder
Reader的功能是讀取數(shù)據(jù)記錄,Decoder的功能是將數(shù)據(jù)的記錄轉(zhuǎn)化為張量格式。在使用時需要先創(chuàng)建輸入數(shù)據(jù)文件對應(yīng)的Reader,然后從文件名隊(duì)列中取出文件名,在調(diào)用Reader.read的方法返回一個類似于(輸入文件名,數(shù)據(jù)記錄)的元組。最后使用Decoder方法將每一列數(shù)據(jù)都轉(zhuǎn)化為張量的形式。
四、批隊(duì)列
批隊(duì)列可以在構(gòu)建圖之前事先構(gòu)建好,樣例隊(duì)列需要在圖中直接產(chǎn)生不用直接預(yù)定義。所以先介紹批隊(duì)列的構(gòu)建方式。批隊(duì)列主要是樣例打包聚集成批數(shù)據(jù),能供模型訓(xùn)練使用。一般是使用tf.train.shuffle_batch和tf.train.batch的方法構(gòu)建??梢钥刂婆拇笮。ㄒ淮涡宰x入的 數(shù)據(jù)大?。€程個數(shù),然后在圖中直接調(diào)用。
五、樣例隊(duì)列
樣例隊(duì)列的創(chuàng)建方式是隱式的,一般在圖中為了計(jì)算任務(wù)順利的輸入數(shù)據(jù),我們一般使用tf.train.start_queue_runners方法啟動所有的入隊(duì)操作所需的線程,此時會自動執(zhí)行所有的文件名入隊(duì)操作和文件名隊(duì)列的操作,執(zhí)行樣例隊(duì)列入隊(duì)和樣例隊(duì)列的操作。這些都是在后臺產(chǎn)生的。
六、線程協(xié)調(diào)器
并行讀取數(shù)據(jù)離不開多線程操作,多線程操作離不開線程調(diào)節(jié)器。tensorflow使用tf.train.Coordinatior方法創(chuàng)建管理多線程生命周期的調(diào)節(jié)器。調(diào)節(jié)器的工作原理比較簡單,它監(jiān)控Tensoflow后臺的所有線程,當(dāng)某一個線程出現(xiàn)異常時,它的should_stop方法返回true,最后調(diào)用request_stop終止所有的線程。但是要注意我們在使用線程調(diào)節(jié)器之前一定要調(diào)用tf.local_variables_initializer方法進(jìn)行初始化。
七、讀入數(shù)據(jù)類型
tensorflow讀入的數(shù)據(jù)類型可以使csv,TFRecord和自由格式文件。CSV的讀取直接調(diào)用tf.TextLineReader構(gòu)建Reader,再調(diào)用tf.decoder_csv的方法對文件進(jìn)行解碼變?yōu)閺埩俊?/p>
TFRecoder是tensorflow標(biāo)準(zhǔn)的輸入格式,它是通過protocolBuffer構(gòu)建的存儲數(shù)據(jù)記錄的結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu)分明,一個樣例中包含一組特征Features,一個Features又包含多個特征向量feature。其在讀取的時候主要使用tf.TFRecoderReader的方法構(gòu)建Reader,在使用read的方法讀出元組。接著對元組中的value采用tf.parse_single_example()方法進(jìn)行解析。再解析的時候需要傳入features參數(shù),該參數(shù)要和構(gòu)造該文件時輸入的字典型變量保持一致(key,value)。key和輸入的key一致,value是一個表示該key對應(yīng)的維度和類型的定西,用tf.FixedLenFeature函數(shù)構(gòu)造,該函數(shù)傳入?yún)?shù)表示特征形狀和特征值的類型。具體如下:
自由格式是指用戶自定義的二進(jìn)制文件,他存儲的對象是字符串,每條記錄都是一個固定長度的字節(jié)塊。再讀入的時候首先要使用tf.FixedLengthRecoderReader的方法讀取對應(yīng)的二進(jìn)制文件,然后使用tf.decode_raw的方法將字符串轉(zhuǎn)化為uint8類型的張量。
八、整體代碼
具體的相關(guān)碼如下:
以上這篇tensorflow之并行讀入數(shù)據(jù)詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
分享標(biāo)題:tensorflow之并行讀入數(shù)據(jù)詳解-創(chuàng)新互聯(lián)
URL標(biāo)題:http://jinyejixie.com/article18/dcijgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、商城網(wǎng)站、虛擬主機(jī)、品牌網(wǎng)站設(shè)計(jì)、云服務(wù)器、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容