1. 程式人生 > >tensorflow--開啟執行緒操作

tensorflow--開啟執行緒操作

執行緒非同步

在訓練過程中,可以通過非同步讀取資料,加快程式執行速度

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)