線程隊列與IO操作 (二)

線程隊列與IO操作

記錄,成為更好的自己

1. 隊列和線程

2. 文件讀取

3. 圖片處理


2. 文件讀取

1. 文件讀取流程

  1. 構(gòu)造一個文件隊列,把路徑+文件放入隊列中
  2. 讀取隊列內(nèi)容十厢,不同的文件有不同的讀取方式蜡豹。
    • csv文件:默認讀取一行
    • 二進制文件:指定一個樣本的bytes
    • 圖片文件:按一張一張的讀取
  3. 解碼,讀取一個樣本的內(nèi)容
  4. 批處理

2. 文件讀取API

  1. 構(gòu)造文件隊列

    • tf.train.string_input_producer(string_tensor, shuffle=True)
    • 將輸出字符串(例如文件名)輸入到管道隊列
      • string_tensor:含有文件名的1階張量(就相當于是一個列表慧脱,里面放的是每個文件的名字,注意要加路徑)
      • shuffle:讀取的時候亂不亂贺喝,亂也沒有關系
      • num_epochs:過幾遍數(shù)據(jù)菱鸥,默認無限過數(shù)據(jù)
      • return:具有輸出字符串的隊列
  2. 文件閱讀器

    根據(jù)文件格式,選擇相應的文件閱讀器

    • class tf.TestLineReader
      • 閱讀文本文件逗號分隔值(CSV)格式躏鱼,默認按行讀取
      • return:讀取器實例
    • tf.FixedLengthRecordReader(record_bytes)
      • 要讀取每個記錄是固定數(shù)量字節(jié)二進制文件氮采,每個樣本占多少個自己去讀取。
      • record_bytes:整型染苛,指定每次讀取的字節(jié)數(shù)
      • return:讀取器實例
    • tf.TFRecordReader
      • 讀取TfRecords文件

    有一個共同的讀取方法:

    • read(file_queue):從隊列中指定數(shù)量內(nèi)容鹊漠,返回一個Tensors元祖(key文件名主到,value默認的內(nèi)容(行,字節(jié)))
  3. 文件內(nèi)容解碼器

    從文件中讀取的是字符串躯概,需要函數(shù)去解析這些字符串到張量

    • tf.decode_csv(records, record_defaults=None, field_delim=None, name=None)
      將CSV轉(zhuǎn)換為張量登钥,與tf.TextLineReader搭配使用
      • records:tensor型字符串,每個字符串是CSV中的記錄行娶靡,就是剛剛讀出來的value
      • field_delim:默認分割符“牧牢,”
      • record_defaults:參數(shù)決定了所得張量的類型,并設置一個值在輸入字符串中缺少使用默認值姿锭。如:
    • tf.decode_raw(bytes, out_type,little_endian=None,name=None)
      • 將字節(jié)裝換為一個數(shù)字向量表示塔鳍,字節(jié)為一個字符串類型的張量,與函數(shù)tf.FixedLengthRecordReader搭配使用呻此,二進制讀取為uint8格式
  • 開啟線程操作
    • tf.train.start_queue_runners(sess=None,coord=None)
      • 收集所有圖中的隊列線程轮纫,并啟動線程
      • sess:所在的會話中
      • coord:線程協(xié)調(diào)器
      • return:返回所有線程隊列
  • 管道讀端批處理
    • tf.train.batch(tensor,batch_size, num_threads=1,capacity=32,name=None)
      • 讀取指定大小(個數(shù))的張量
      • tensor:可以是包含張量的列表
      • batch_size:從隊列中讀取的批處理大小
      • num_threads:進入隊列的線程數(shù)
      • capacity:整數(shù)趾诗,隊列中元素的最大數(shù)量
      • return:tensors

文件讀取案例

CSV文件讀取

1. 先找到文件蜡感,構(gòu)造一個列表
2. 構(gòu)造文件隊列
3. 構(gòu)造閱讀器,讀取隊列內(nèi)容
4. 解碼內(nèi)容
5. 批處理(多個樣本)
```
def csvread(filelist):
    """
    讀取CSV文件
    :param filelist:文件路徑+名字的列表
    :return: 讀取的內(nèi)容
    """
    # 1. 構(gòu)造文件的列表
    file_queue = tf.train.string_input_producer(filelist)
     # 2. 構(gòu)造閱讀器
    reader = tf.TextLineReader()

    key ,value = reader.read(file_queue)
    # print(value)

    # 3. 對每行內(nèi)容進行解碼
    # record_defaults:指定每一個樣本的每一列的類型恃泪,還可以指定默認值
    records = [["None"],["None"]] #這里有兩列郑兴,指定兩個
    example, label = tf.decode_csv(value, record_defaults=records)
    # print(example, label)

    # 4. 讀取多個數(shù)據(jù),進行批處理
    # 批處理大斜春酢(batch_size)跟隊列情连,數(shù)據(jù)的數(shù)量沒有影響,只決定 這批次取多少數(shù)據(jù)
    example_batch, label_batch = tf.train.batch([example, label], batch_size=9 , num_threads=1,capacity=9)
    return example_batch, label_batch


if __name__=="__main__":
    # 1. 找到文件览效,放入列表
    file_name = os.listdir("./data/csvdata")
    filelist = [os.path.join("./data/csvdata",file) for file in file_name]
    # print(file_name)
    example_batch, label_batch = csvread(filelist)

    # 開啟會話
    with tf.Session() as sess:
        # 開啟線程協(xié)調(diào)器
        coord = tf.train.Coordinator()

        # 開啟讀取文件的線程
        threads = tf.train.start_queue_runners(sess, coord=coord)

        # 打印讀取內(nèi)容
        print(sess.run([example_batch, label_batch]))

        # 回收子線程
        coord.request_stop()
        coord.join(threads)
```
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末却舀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锤灿,更是在濱河造成了極大的恐慌挽拔,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件但校,死亡現(xiàn)場離奇詭異螃诅,居然都是意外死亡,警方通過查閱死者的電腦和手機状囱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門术裸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人亭枷,你說我怎么就攤上這事袭艺。” “怎么了叨粘?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵猾编,是天一觀的道長瘤睹。 經(jīng)常有香客問我,道長答倡,這世上最難降的妖魔是什么默蚌? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮苇羡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鼻弧。我一直安慰自己设江,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布攘轩。 她就那樣靜靜地躺著叉存,像睡著了一般。 火紅的嫁衣襯著肌膚如雪度帮。 梳的紋絲不亂的頭發(fā)上歼捏,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音笨篷,去河邊找鬼瞳秽。 笑死,一個胖子當著我的面吹牛率翅,可吹牛的內(nèi)容都是我干的练俐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼冕臭,長吁一口氣:“原來是場噩夢啊……” “哼腺晾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辜贵,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤悯蝉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后托慨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鼻由,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年榴芳,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗡靡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡窟感,死狀恐怖讨彼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柿祈,我是刑警寧澤哈误,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布哩至,位于F島的核電站,受9級特大地震影響蜜自,放射性物質(zhì)發(fā)生泄漏菩貌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一重荠、第九天 我趴在偏房一處隱蔽的房頂上張望箭阶。 院中可真熱鬧,春花似錦戈鲁、人聲如沸仇参。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诈乒。三九已至,卻和暖如春婆芦,著一層夾襖步出監(jiān)牢的瞬間怕磨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工消约, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肠鲫,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓荆陆,卻偏偏與公主長得像滩届,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子被啼,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容