Tensorflow 多线程设置方式


Posted in Python onFebruary 06, 2020

一. 通过 ConfigProto 设置多线程

(具体参数功能及描述见 tensorflow/core/protobuf/config.proto)

在进行 tf.ConfigProto() 初始化时,可以通过设置相应的参数,来控制每个操作符 op 并行计算的线程个数或 session 线程池的线程数。主要涉及的参数有以下三个:

1. intra_op_parallelism_threads 控制运算符op内部的并行
当运算符 op 为单一运算符,并且内部可以实现并行时,如矩阵乘法,reduce_sum 之类的操作,可以通过设置 intra_op_parallelism_threads 参数来并行。

2. inter_op_parallelism_threads 控制多个运算符op之间的并行计算
当有多个运算符 op,并且他们之间比较独立,运算符和运算符之间没有直接的路径 Path 相连。Tensorflow会尝试并行地计算他们,使用由 inter_op_parallelism_threads 参数来控制数量的一个线程池。
在第一次创建会话将设置将来所有会话的线程数,除非是配置了 session_inter_op_thread_pool 选项。

3. session_inter_op_thread_pool 配置会话线程池。
如果会话线程池的 num_threads 为 0,使用 inter_op_parallelism_threads 选项。

二. 通过队列进行数据读取时设置多线程

(具体函数功能及描述见 tensorflow/python/training/input.py)

1. 通过以下函数进行样本批处理时,可以通过设置 num_threads 来设置单个 Reader 多线程读取

1) batch(tensors, batch_size, num_threads=1, capacity=32,
enqueue_many=False, shapes=None, dynamic_pad=False,
allow_smaller_final_batch=False, shared_name=None, name=None)

2) maybe_batch(tensors, keep_input, batch_size, num_threads=1, capacity=32,
enqueue_many=False, shapes=None, dynamic_pad=False,
allow_smaller_final_batch=False, shared_name=None, name=None)

3) shuffle_batch(tensors, batch_size, capacity, min_after_dequeue,
num_threads=1, seed=None, enqueue_many=False, shapes=None,
allow_smaller_final_batch=False, shared_name=None, name=None)

4) maybe_shuffle_batch(tensors, batch_size, capacity, min_after_dequeue,
keep_input, num_threads=1, seed=None,
enqueue_many=False, shapes=None,
allow_smaller_final_batch=False, shared_name=None,
name=None)

例:

import tensorflow as tf 
 
 
filenames = ['A.csv', 'B.csv', 'C.csv'] 
# 生成一个先入先出队列和一个 QueueRunner,生成文件名队列 
filename_queue = tf.train.string_input_producer(filenames, shuffle=False) 
 
 
# 定义 Reader 和 Decoder
reader = tf.TextLineReader() 
key, value = reader.read(filename_queue) 
example, label = tf.decode_csv(value, record_defaults=[['null'], ['null']])
 
 
# 使用tf.train.batch() 会为 graph 添加一个样本队列和一个 QueueRunner。 
# 经过 Reader 读取文件和 Decoder 解码后数据会进入这个队列,再批量出队。
# tf.train.batch() 这里只有一个 Reader,可以设置多线程
 
example_batch, label_batch = tf.train.batch([example, label], batch_size=5) 
 
 
with tf.Session() as sess: 
  coord = tf.train.Coordinator() 
  threads = tf.train.start_queue_runners(coord=coord) 
  for i in range(10): 
    e_val,l_val = sess.run([example_batch,label_batch]) 
    print e_val,l_val 
  coord.request_stop() 
  coord.join(threads)

2. 通过以下函数进行样本批处理时,可以通过设置 Decoder 和 Reader 的个数来设置多 Reader 读取,其中每个 Reader 使用一个线程

1) batch_join(tensors_list, batch_size, capacity=32, enqueue_many=False,
shapes=None, dynamic_pad=False, allow_smaller_final_batch=False,
shared_name=None, name=None):

2) maybe_batch_join(tensors_list, keep_input, batch_size, capacity=32,
enqueue_many=False, shapes=None, dynamic_pad=False,
allow_smaller_final_batch=False, shared_name=None,
name=None)

3) shuffle_batch_join(tensors_list, batch_size, capacity,
min_after_dequeue, seed=None, enqueue_many=False,
shapes=None, allow_smaller_final_batch=False,
shared_name=None, name=None)

4) maybe_shuffle_batch_join(tensors_list, batch_size, capacity,
min_after_dequeue, keep_input, seed=None,
enqueue_many=False, shapes=None,
allow_smaller_final_batch=False, shared_name=None,
name=None)

例:

import tensorflow as tf 
 
 
filenames = ['A.csv', 'B.csv', 'C.csv'] 
# 生成一个先入先出队列和一个 QueueRunner,生成文件名队列
filename_queue = tf.train.string_input_producer(filenames, shuffle=False) 
 
 
# 定义 Reader
reader = tf.TextLineReader() 
key, value = reader.read(filename_queue) 
 
 
#定义了多个 Decoder, 每个 Decoder 跟一个 Reader 相连, 即有多个 Reader
example_list = [tf.decode_csv(value, record_defaults=[['null'], ['null']])
         for _ in range(2)] # Decoder 和 Reader 为 2
   
# 使用tf.train.batch_join() 会为 graph 添加一个样本队列和一个 QueueRunner。 
# 经过多个 Reader 读取文件和 Decoder 解码后数据会进入这个队列,再批量出队。   
# 使用 tf.train.batch_join(), 可以使用多个 Reader 并行读取数据。每个 Reader 使用一个线程
example_batch, label_batch = tf.train.batch_join(example_list, batch_size=5) 
with tf.Session() as sess: 
  coord = tf.train.Coordinator() 
  threads = tf.train.start_queue_runners(coord=coord) 
  for i in range(10): 
    e_val,l_val = sess.run([example_batch,label_batch]) 
    print e_val,l_val 
  coord.request_stop() 
  coord.join(threads)

以上这篇Tensorflow 多线程设置方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python ElementTree 基本读操作示例
Apr 09 Python
python判断给定的字符串是否是有效日期的方法
May 13 Python
Python利用Nagios增加微信报警通知的功能
Feb 18 Python
利用Python实现图书超期提醒
Aug 02 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
Python 列表(List) 的三种遍历方法实例 详解
Apr 15 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
python实现弹窗祝福效果
Apr 07 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
基于python实现生成指定大小txt文档
Jul 20 Python
Scrapy框架基本命令与settings.py设置
Feb 06 #Python
python opencv圆、椭圆与任意多边形的绘制实例详解
Feb 06 #Python
Python输出指定字符串的方法
Feb 06 #Python
python实现简单飞行棋
Feb 06 #Python
python实现飞行棋游戏
Feb 05 #Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 #Python
Python操作Sqlite正确实现方法解析
Feb 05 #Python
You might like
php为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
javascript中length属性的探索
2011/07/31 Javascript
Javascript表格翻页效果实现思路及代码
2013/08/23 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
如何让你的JS代码更好看易读
2017/12/01 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
python写xml文件的操作实例
2014/10/05 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
sklearn+python:线性回归案例
2020/02/24 Python
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
销售岗位职责范本
2014/06/12 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
五好家庭事迹材料
2014/12/20 职场文书
中学生自我评价范文
2015/03/03 职场文书
广告文案的撰写技巧(实用干货)
2019/08/23 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python
什么是SOLID
2022/03/24 Javascript