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爬虫框架Scrapy安装使用步骤
Apr 01 Python
python用10行代码实现对黄色图片的检测功能
Aug 10 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
Sep 26 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
使用python获取csv文本的某行或某列数据的实例
Apr 03 Python
Django如何自定义分页
Sep 25 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
Django ORM 常用字段与不常用字段汇总
Aug 09 Python
python实现可下载音乐的音乐播放器
Feb 25 Python
如何通过命令行进入python
Jul 06 Python
PyCharm常用配置和常用插件(小结)
Feb 06 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自带的进位制之间的转换函数
2013/06/08 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
PHP进程通信基础之信号
2017/02/19 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
Jquery ui css framework
2010/06/28 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
python发送邮件功能实现代码
2016/07/15 Python
Django学习笔记之Class-Based-View
2017/02/15 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
Python发展简史 Python来历
2019/05/14 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
我的网上商城创业计划书
2013/12/26 职场文书
培训班主持词
2014/03/28 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
责任书范本大全
2015/05/11 职场文书
新闻报道稿范文
2015/07/23 职场文书
军训后的感想
2015/08/07 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python