Tensorflow如何设置多线程
这篇文章给大家分享的是有关Tensorflow如何设置多线程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
一. 通过 ConfigProto 设置多线程
在进行 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 选项。
二. 通过队列进行数据读取时设置多线程
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)
例:
importtensorflowastf 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) withtf.Session()assess: coord=tf.train.Coordinator() threads=tf.train.start_queue_runners(coord=coord) foriinrange(10): e_val,l_val=sess.run([example_batch,label_batch]) printe_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)
例:
importtensorflowastf 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_inrange(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) withtf.Session()assess: coord=tf.train.Coordinator() threads=tf.train.start_queue_runners(coord=coord) foriinrange(10): e_val,l_val=sess.run([example_batch,label_batch]) printe_val,l_val coord.request_stop() coord.join(threads)
感谢各位的阅读!关于“Tensorflow如何设置多线程”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
推荐阅读
-
如何使用TensorFlow创建CNN
-
Tensorflow中CNN入门的手写数字识别是怎样的
-
关于Keras 2.3.0 发布中的TensorFlow 2.0分析
关于Keras2.3.0发布中的TensorFlow2.0分析...
-
tensorflow怎么配置
tensorflow怎么配置这篇文章主要介绍“tensorflow...
-
tensorflow语义分割api之使用deeplab训练cityscapes的示例分析
这篇文章给大家分享的是有关tensorflow语义分割api之使用deeplab训练cityscapes的示例分析的内容。小编觉得...
-
TensorFlow tf.nn.conv2d如何实现卷积的方式
这篇文章主要介绍TensorFlowtf.nn.conv2d如何实现卷积的方式,文中介绍的非常详细,具有一定的参考价值,感兴趣的...
-
TensorFlow设置日志级别的方法有哪些
-
Tensorflow如何设置显存自适应,显存比例的操作
这篇文章将为大家详细讲解有关Tensorflow如何设置显存自适应,显存比例的操作,小编觉得挺实用的,因此分享给大家做个参考,希望...
-
如何在tensorflow中使用tf.concat()函数
这期内容当中小编将会给大家带来有关如何在tensorflow中使用tf.concat()函数,文章内容丰富且以专业的角度为大家分析...
-
怎么在Tensorflow中使用dropout