博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tensorflow mini batch 训练中线程和队列数据输入的问题
阅读量:2121 次
发布时间:2019-04-30

本文共 678 字,大约阅读时间需要 2 分钟。

tensorflow mini batch 训练中线程和队列数据输入的问题

实际学习和使用tensorflow的时候,面临大数据量训练的场景,几乎很少使用Session.run中的feed_dict来批量导入数据。tensorflow利用多线程和队列方法异步实现大批量数据的输入,大大节省了数据输入引起的资源浪费。大致的流程如下:

  1. 先创建一个“先入先出”的队列(FIFOQueue)
  2. 创建enqueue方法和dequeue对象:
    enqueue_operation = queue.enqueue
    inputs = queue.dequeue
  3. 利用inputs对象作为神经网络图的输入构建神经网络
  4. 创建cord=tf.train.Coordinator()管理多线程同步
  5. 启动队列工作tf.train.start_queue_runners(sess=sess, coord=cord)
  6. 启动线程写入队列start_threads(sess=sess, coord=coord, n_threads=8)
  7. session.run(),启动训练,这时候是不用通过feed_dict来喂数据的,最关键的理解是第3步,我曾经在运行代码的时候一直不理解,因为enqueue是可以很容易设置断点监控到了,但dequeue方法却没看到,所以痛苦了一段时间。最后单步跟,看到input的提示是这样一个tensor(Tensor(“fifo_queue_Dequeue:0”, dtype=float32, device=/device:GPU:0)),算是想通了这一点。

转载地址:http://cuyrf.baihongyu.com/

你可能感兴趣的文章
透彻理解神经机器翻译的原理
查看>>
实践:动手搭建聊天机器人
查看>>
情感分析 Kaggle 实战
查看>>
动手实现 Bahdanau 注意力模型
查看>>
用一个小例子理解 seq2seq 的本质
查看>>
双向 LSTM-CRF 实现命名实体识别
查看>>
序列模型实现词性标注
查看>>
双向 RNN 识别手写数字
查看>>
Peephole LSTM、GRU 实战
查看>>
LSTM 的几种改进方案
查看>>
用 word2vec 进行文档聚类
查看>>
详解 GloVe 的原理和应用
查看>>
word2vec:基于层级 softmax 和负采样的 Skip-Gram
查看>>
word2vec:基于层级 softmax 和负采样的 CBOW
查看>>
用 RNN 建立语言模型
查看>>
用 LSTM 预测股票价格
查看>>
LSTM 三重门背后的故事
查看>>
具有记忆能力的 RNN
查看>>
TensorFlow 2.0 Alpha 实用教程
查看>>
一文掌握 Keras
查看>>