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 UNIX_TIMESTAMP时间处理方法分析
Apr 18 Python
Python实现八皇后问题示例代码
Dec 09 Python
解决python写入带有中文的字符到文件错误的问题
Jan 31 Python
Python3中exp()函数用法分析
Feb 19 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
PyQt5固定窗口大小的方法
Jun 18 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
关于numpy数组轴的使用详解
Dec 05 Python
新年福利来一波之Python轻松集齐五福(demo)
Jan 20 Python
Django数据结果集序列化并展示实现过程
Apr 22 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
javascript数组的扩展实现代码集合
2008/06/01 Javascript
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
Nuxt的路由动画效果案例
2020/11/06 Javascript
python开发之list操作实例分析
2016/02/22 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
基于Python实现扑克牌面试题
2019/12/11 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
诉讼授权委托书范本
2014/10/05 职场文书
建国大业电影观后感
2015/06/01 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
Django实现drf搜索过滤和排序过滤
2021/06/21 Python
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏
Javascript webpack动态import
2022/04/19 Javascript