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解决计数原理问题的方法
Aug 04 Python
Python 含参构造函数实例详解
May 25 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
Python获取二维矩阵每列最大值的方法
Apr 03 Python
Python任意字符串转16, 32, 64进制的方法
Jun 12 Python
Python callable内置函数原理解析
Mar 05 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 Python
python实现图片素描效果
Sep 26 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 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搭建聊天室功能实例代码
2012/08/20 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
在Python中处理时间之clock()方法的使用
2015/05/22 Python
在Django中创建第一个静态视图
2015/07/15 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
python利用opencv实现颜色检测
2021/02/23 Python
苏格兰领先的多渠道鞋店:Begg Shoes
2019/10/22 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
物业管理大学生个人的自我评价
2013/10/10 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
被告代理词范文
2015/05/25 职场文书
高三数学教学反思
2016/02/18 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python