tensorflow的session物件支援多執行緒,可以在同乙個session中建立多個執行緒,預設是cpu有多少個核,就啟動多少個執行緒。
tensorflow提供了倆個類來實現對session中多執行緒的管理:tf.coordinator和tf.queuerunner,這倆個類必須一起使用。
coordinator類用來管理session中的多個執行緒。使用tf.tain.coordinator()來建立乙個執行緒管理器物件。
queuerunner()類用來啟動tensor的入隊執行緒,可以用來啟動多個工作執行緒同時將多個tensor(訓練資料)推送入檔名佇列中,具體執行函式是tf.train.start_queue_runners(coord=coord,sess=sess).
1.呼叫tf.train.slice_input_producer(),從本地檔案中抽取tensor,準備放入filename queue(檔名佇列)中。可以選擇引數shuffle=true。
2.tf.train.batch,從檔名佇列中提取tensor,使用單個或多個執行緒,準備放入檔案佇列。
3.tf.train.coordinator()來建立乙個執行緒協調器,用來管理之後再session中啟動的所有執行緒。
4.tf.train.start_queue_runners(coord=coord,sess=sess),啟動入隊執行緒,由單個或多個執行緒按照設定規則,把檔案讀入filename queue中。函式返回執行緒id的列表,一般情況下,系統又多少個核,就會啟動多少個入隊執行緒(入隊具體使用多少個執行緒,在tf.train.batch中定義)。
5.檔案從filename queue中讀入記憶體佇列的操作不用手動執行,由tf自動完成。
6.呼叫sess.run來啟動資料出列和計算。
7.使用coord.should_stop()來查詢是否應該終止所有執行緒,當佇列(queue)中的所有檔案都已經讀取出列的時候,會丟擲乙個outofrangeerror的異常。這時候就應該停止session中的所有執行緒。
8.使用coord.request_stop()來發出終止所有執行緒的命令。
9.coord.join(threads) 把執行緒加入主線程,等待threads結束。
原文:https:
80714539
tensorflow 佇列與多執行緒
1 tensorflow資料輸入簡介 為了避免影象預處理成為神經網路模型訓練效率的瓶頸,tensorflow提供了多執行緒處理輸入資料的框架。流程如下 1 指定原始資料的檔案列表 2 建立檔案列表佇列 3 從檔案中讀取資料 4 資料預處理 5 整理成batch作為神經網路輸入 tensorflow中...
TensorFlow佇列與多執行緒
1 tf.coordinatorimport numpy as np import threading import time import tensorflow as tf 執行緒中執行的程式,這個程式每隔1秒判斷是否需要停止並列印自己的id def myloop coord,worker id ...
TensorFlow學習 多執行緒訓練
最近在學tensorflow,在此把學到的東西記錄一下。在學習別人 時,遇到多執行緒訓練的問題,擷取部分如下 image,label readmyowndata.read and decode dog and cat train.tfrecords sess tf.interactivesessio...