[异步、tensorflow] - 子线程操作tensor,主线程处理tensor

34 篇文章 0 订阅
3 篇文章 0 订阅
  • 参考
  • 整体流程如下图
    在这里插入图片描述
  • 代码
import  tensorflow as tf

"""
    模拟: 子线程不停的取数据放入队列中, 主线程从队列中取数据执行
    包含: 作用域的命名、把程序的图结构写入事件、多线程
"""

# 模拟异步存入样本.
# 1、 定义一个队列,长度为1000
with tf.variable_scope("init_sub_threads"):
    Q = tf.FIFOQueue(1000, tf.float32)

# 2、 定义子线程需要做的事情, 值循环+1, 放入队列中
with tf.variable_scope("add_one"):
    var = tf.Variable(0.0, tf.float32)

    # 实现自增
    data = tf.assign_add(var, tf.constant(1.0))

    en_q = Q.enqueue(data)

# 3、 定义队列管理器Op,指定子线程
with tf.variable_scope("init_queue_runner"):
    qr = tf.train.QueueRunner(Q, enqueue_ops=[en_q] * 2)

# 初始化变量的op
with tf.variable_scope("init_var"):
    init_op = tf.global_variables_initializer()

with  tf.Session() as sess:
    # 初始化变量
    sess.run(init_op)

    # 开启线程管理器
    coord = tf.train.Coordinator()

    # 真正开启子线程
    threads = qr.create_threads(sess, start = True)

    # 主线程,不断读取数据训练
    for i in range(300):
        print(sess.run(Q.dequeue()))

    # 把程序的图结构写入事件
    filewriter = tf.summary.FileWriter("./summary/", graph=sess.graph)

    # 回收线程
    coord.request_stop()

    coord.join(threads)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值