数据预处理时往往涉及多个文件,所以使用多个线程对文件进行处理能够加快整体的运行速度。而线程的操作往往对队列的操作。因为文件处理可以排成队列进行操作。
下面将先上一段对队列基本操作的代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#队列的基本操作 创建--初始化--出队--执行加1操作--入队--输出
import tensorflow as tf
#创建
q = tf.FIFOQueue(2, "int32") #队列元素个数 类型
#初始化enqueue_many
init = q.enqueue_many(([0, 10],))
#出队dequeue第一个元素
x = q.dequeue()
y = x+1
#入队enqueue
q_inc = q.enqueue([y])
with tf.Session() as sess:
init.run() #初始化运行
for _ in range(5): #运行五次队列操作
v, _ = sess.run([x, q_inc])
print(v)
可以看到输出结果如图:
下面将对其的线程的基本操作,献上源码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#tensorflow提供的线程操作函数主要是tf.Coordinator tf.QueueRunner;
#其中tf.Coordinator函数用法如下面代码的批注:
import tensorflow as tf
import numpy as np
import threading
import time
#线程终止判断函数 should_stop()函数返回true时停止;也可以通过request_stop通知其他线程停止,且将should_stop()置为true
def MyLoop(coord, worker_id):
while not coord.should_stop():
if np.random.rand() <0.1:
print("Stoping from id : %d\n"% worker_id,)
coord.request_stop()
else :
print("working on id : %d\n"%worker_id,)
time.sleep(1)
#申明类协同多个线程
coord = tf.train.Coordinator()
#申明创建5个线程
threads = [threading.Thread(target=MyLoop, args=(coord, i, )) for i in range(5)]
#启动所有线程
for t in threads:
t.start()
#等待所有线程退出
coord.join(threads)
书上的部分xrange(5)已被更改后运行结果如图:
下面将来份多线程同时写入一个队列的操作:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#创建五个同时执行入队操作的线程,来实现对同一个队列的操作 tf.Coordinator tf.QueueRunner
import tensorflow as tf
#申明一个队列
queue = tf.FIFOQueue(100, "float")
#定义线程操作
enqueue_op = queue.enqueue([tf.random_normal([1])])
#创建多个同时操作的线程]
qr = tf.train.QueueRunner(queue, [enqueue_op]*5) #操作队列名称 操作方式 线程数
#将线程加入到制定集合
tf.train.add_queue_runner(qr)
#定义出队
out_tensor = queue.dequeue()
with tf.Session() as sess:
coord = tf.train.Coordinator() #启动线程
threads = tf.train.start_queue_runners(sess=sess, coord=coord) #启动数据集合上的线程
for _ in range(3):
print(sess.run(out_tensor)[0])
#停止线程
coord.request_stop()
coord.join(threads)
运行结果可以看到已经随机插入了三个数入队:
哈哈哈,你学会了吗?
转载于:https://my.oschina.net/u/3770644/blog/3036960
分享到:
相关推荐
本部分将详细介绍Tensorflow中的队列管理、线程协调以及文件读取。 ### 1. 队列和线程 #### 队列管理 - **FIFOQueue**:先进先出(First In First Out)队列,是最基本的队列类型,元素按照加入的顺序依次出队。...
本教程聚焦于 TensorFlow 的一个关键特性:队列与线程,这对于大规模数据处理和高效计算至关重要。下面将详细阐述这一主题。 ### 1. 数据预处理和输入管道 在深度学习中,数据预处理是必不可少的步骤,而队列和...
我们派生$ K $线程来加载和解码CPU中的数据,并维护一个全局FIFO队列来存储数据。 需要一个主要任务线程在GPU中训练网络。 如果加载批处理数据的时间大于在GPU中进行训练的时间,则效率将大大提高。 仿真实验结果...
day05-Tensorflow IO操作-队列和线程、文件读取、图片处理 共40页 day06-Tensorflow、人工神经网络、卷积神经网络、图片识别 共65页 day07-CIFAR图像分类与识别、分布式会话函数、分布式TensorFlow、推荐系统 共74页
当有多个不直接相关的操作符时,TensorFlow会尝试在不同的线程中并行执行它们。你可以通过设置`inter_op_parallelism_threads`来定义这个线程池的大小。 3. `session_inter_op_thread_pool`:这是用来配置会话级别...
6. TensorFlow运作方式的深入讲解,包括变量的创建、初始化、保存和加载,如何利用TensorBoard可视化学习过程和图结构,数据读入,线程和队列的使用,自定义数据读取器的添加,GPU的使用,以及共享变量的管理等。...
涵盖了TensorFlow的基本概念、安装、使用方法、机器学习入门、深入学习、卷积神经网络、递归神经网络、MNIST数据下载、变量、TensorBoard、可视化学习、读取数据、线程和队列、添加新的Op、自定义数据读取、使用GPU...
day05-Tensorflow IO操作-队列和线程、文件读取、图片处理 共40页.pptx day06-Tensorflow、人工神经网络、卷积神经网络、图片识别 共65页.pptx day07-CIFAR图像分类 图像识别、分布式会话函数、分布式TensorFlow、...
机器学习 基于TensorFlow 1.8版本的中文基础教程。适用于有Python基础者入门。 目录: ...第七章 队列与线程 第八章 数据集文件操作 第九章 模型存取 第十章 Eager模式 第十一章 TensorBoard基础用法
4. TensorFlow进阶使用:这部分内容涉及了变量的创建、初始化、保存和加载操作,TensorBoard的使用,数据的读入,线程和队列的管理,如何在GPU上运行TensorFlow模型,以及如何创建和使用共享变量等。TensorBoard是...
8. 队列和同步操作:这些操作允许构建多线程环境下的输入管道。例如,tf.train.shuffle_batch用于将输入数据打包并随机乱序。 9. 数据类型转换:数据类型转换在机器学习中也很常见,tf.to_double、tf.to_float、tf....
本文将详细介绍如何使用TensorFlow实现多线程与多进程数据加载。 首先,多线程数据加载是一种常见的优化手段。在提供的代码示例中,使用了`tf.data.Dataset` API来构建数据管道。`flat_map`函数用于对每个文件中的...
1. **IO操作**:学习如何读取和处理数据,使用队列和线程避免数据加载阻塞模型训练。 2. **神经网络**:构建和训练人工神经网络,包括前馈网络和循环网络。 3. **卷积神经网络(CNN)**:用于图像识别,理解卷积层、...
本文将详细介绍TensorFlow中的三种数据读取方式:预加载数据(Preloaded data)、喂数据(Feeding)以及从文件中读取(Reading from file)。 #### 一、预加载数据 (Preloaded data) 预加载数据是一种较为简单的数据读取...
本文的内容涉及到TensorFlow的基本数据导入机制、队列机制以及实际的代码实现。 首先,我们要明确在机器学习和深度学习项目中,数据预处理是非常关键的一步。数据预处理包括数据清洗、格式转换、归一化等操作,这些...