【tensorflow】文件隊列的兩種創建和加載方式

方式1:內存加載
①創建隊列: queue=tf.FIFOQueue(...) or queue=tf.RandomShuffleQueue(...)
②添加enqueue op: enqueue=tf.enqueue(xxx) or enqueue=tf.enqueue_many([xxx])
③手動添加queue runner: qr=tf.train.QueueRunner(queue,enqueue*thread)
④異步啓動qunue runner: thread=qr.create_threads(sess,corrd,start=True)  


說明:
1) corr=tf.train.Coordinator()用於線程之間協調,通過發送coord.request_stop()和接收corrd.should_stop()同步結束,用coord.join(thread)等待副線程的op執行完畢
2) thread會循環執行



方式2:文件加載
①創建文件名隊列並加載: name_queue=tf.train.string_input_producer(list,epoch,...) or name_queue=tf.train.slice_input_producer([lists],epoch,...)
②讀取並解碼文件名隊列對應的文件: contents=tf.read_file(name_queue),用decoded_contents=tf.image.decode_xxx(contents)解碼
③創建文件隊列並加載批次: batch=tf.train.batch(decoded_contents,...) or batch=tf.train.shuffle_batch(decoded_contents,...)
④啓動線程: thread=tf.train.start_queue_runners(corrd)


說明:
1) tf.train.string_input_producer()和tf.train.batch()中隱含了queue runner的創建和enqueue op的創建
2) tf.train.start_queue_runners()中隱含了多個qr.create_threads()
3) 異步線程加載name_queue時,根據num_epoches參數循環
4) tf.train.string_input_producer()輸入tensor list,返回queue tensor;tf.train.slice_input_producer()輸入list of tensor list,返回list of queue tensor
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章