tensorflow--開啟執行緒操作
阿新 • • 發佈:2018-11-03
執行緒非同步
在訓練過程中,可以通過非同步讀取資料,加快程式執行速度
1. 操作過程
1.1. 定義要做的事情
例如讀取檔案,此處示例就變數自加好了:
var = tf.Variable(0.0)
data = tf.assign_add(var,tf.constant(1.0))
1.2. 定義佇列
Q = tf.FIFOQueue(1000, tf.float32)
1.3. 定義入隊操作
en_q = Q.enqueue(data)
1.4. 定義入隊管理器
qr = tf.train.QueueRunner(Q, enqueue_ops=[en_q] * 5)
最後*5
是指設定5個執行緒幹en_q這件事
1.5. 定義執行緒管理器
coord = tf.train.Coordinator()
1.6. 開啟子執行緒
注意,接下來操作都在session()中執行
threads = qr.create_threads(sess, coord=coord, start=True)
1.7. 讀取資料
for i in range(1000):
print(sess.run(Q.dequeue()))
1.8. 關閉與回收
coord.request_stop()
coord.join(threads)
2. 完整程式碼
import tensorflow as tf
# 定義操作0
var = tf.Variable(0.)
data = tf.assign_add(var, tf.constant(1.0))
# 定義佇列
Q = tf.FIFOQueue(1000, tf.float32)
# 定義入隊操作
en_q = Q.enqueue(data)
# 定義入隊管理器
qr = tf.train.QueueRunner(Q, enqueue_ops=[en_q] * 5)
# 定義執行緒管理器
coord = tf.train.Coordinator()
with tf.Session( ) as sess:
# 初始化變數
init_op = tf.global_variables_initializer()
sess.run(init_op)
# 開啟子執行緒
threads = qr.create_threads(sess, coord=coord, start=True)
# 讀取資料
for i in range(1000):
print(sess.run(Q.dequeue()))
# 回收
coord.request_stop()
coord.join(threads)