2018-04-05

           詳解tensorflow數據讀取機制

如何在tensorflow中創(chuàng)建上述的兩個隊列呢?
1.對于文件名隊列,我們使用tf.train.string_input_producer函數。這個函數需要傳入一個文件名list,系統(tǒng)會自動將它轉為一個文件名隊列.此外tf.train.string_input_producer還有兩個重要的參數,一個是num_epochs,它就是我們上文中提到的epoch數。另外一個就是shuffle.
2.在tensorflow中,內存隊列不需要我們自己建立,我們只需要使用reader對象從文件名隊列中讀取數據就可以了
3.在我們使用tf.train.string_input_producer創(chuàng)建文件名隊列后,整個系統(tǒng)其實還是處于“停滯狀態(tài)”的,也就是說,我們文件名并沒有真正被加入到隊列中。此時如果我們開始計算,因為內存隊列中什么也沒有,計算單元就會一直等待,導致整個系統(tǒng)被阻塞.而使用tf.train.start_queue_runners之后,才會啟動填充隊列的線程,這時系統(tǒng)就不再“停滯”。此后計算單元就可以拿到數據并進行計算,整個程序也就跑起來了,這就是函數tf.train.start_queue_runners的用處。


image
import tensorflow as tf 

# 新建一個Session
with tf.Session() as sess:
# 我們要讀三幅圖片A.jpg, B.jpg, C.jpg
filename = ['A.jpg', 'B.jpg', 'C.jpg']
# string_input_producer會產生一個文件名隊列
filename_queue = tf.train.string_input_producer(filename, shuffle=False, num_epochs=5)
# reader從文件名隊列中讀數據。對應的方法是reader.read
reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)
# tf.train.string_input_producer定義了一個epoch變量,要對它進行初始化
tf.local_variables_initializer().run()
# 使用start_queue_runners之后,才會開始填充隊列
threads = tf.train.start_queue_runners(sess=sess)
i = 0
while True:
    i += 1
    # 獲取圖片數據并保存
    image_data = sess.run(value)
    with open('read/test_%d.jpg' % i, 'wb') as f:
        f.write(image_data)

https://zhuanlan.zhihu.com/p/27238630

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • MachineLP閱讀 350評論 0 0
  • 昨夜雨疏風驟,濃睡不消殘酒。試問卷簾人,卻道海棠依舊。知否,知否?應是綠肥紅瘦。 ...
    藍羽魚閱讀 322評論 0 1
  • 01 歐洲杯來了,男人們瘋了,小A也瘋了。 她說,只要有球賽,男朋友必定跟他的狐朋狗友出去浪。球賽又都集中在后半夜...
    草言閱讀 2,605評論 2 0
  • 早在兩個月前哲同學計劃放寒假了騎車回老家――拾橋,從荊門到拾橋差不多70公里路,以為他只是說說而已,沒在意。...
    胡胡_9e10閱讀 149評論 2 2
  • 在日常生活中,我們常會看到諸多有關癌癥治療費用的新聞事件,很多患者因無力承擔高昂的治療費用,而放棄治療,失去生命;...
    fb08048623c0閱讀 1,481評論 0 0

友情鏈接更多精彩內容