TensorFlow多线程输入数据处理框架(三)——组合训练数据

参考书

《TensorFlow:实战Google深度学习框架》(第2版)

通过TensorFlow提供的tf.train.batch和tf.train.shuffle_batch函数来将单个的样例组织成batch的形式输出。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# coding=utf-8 

"""
@author: Li Tian
@contact: [email protected]
@software: pycharm
@file: sample_data_deal2.py
@time: 2019/2/4 11:15
@desc: 通过TensorFlow提供的tf.train.batch和tf.train.shuffle_batch函数来将单个的样例组织成batch的形式输出。
"""

import tensorflow as tf

# 使用tf.train.match_filenames_once函数获取文件列表
files = tf.train.match_filenames_once(‘./data.tfrecords-*‘)

# 通过tf.train.string_input_producer函数创建输入队列,输入队列中的文件列表为
# tf.train.match_filenames_once函数获取的文件列表。这里将shuffle参数设为False
# 来避免随机打乱读文件的顺序。但一般在解决真实问题时,会将shuffle参数设置为True
filename_queue = tf.train.string_input_producer(files, shuffle=False)

# 如前面所示读取并解析一个样本
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
features = tf.parse_single_example(
    serialized_example,
    features={
        ‘i‘: tf.FixedLenFeature([], tf.int64),
        ‘j‘: tf.FixedLenFeature([], tf.int64),
    }
)

# 使用前面的方法读取并解析得到的样例。这里假设Example结构中i表示一个样例的特征向量
# 比如一张图像的像素矩阵。而j表示该样例对应的标签。
example, label = features[‘i‘], features[‘j‘]

# 一个batch中样例的个数。
batch_size = 3
# 组合样例的队列中最多可以存储的样例个数。这个队列如果太大,那么需要占用很多内存资源;
# 如果太小,那么出队操作可能会因为没有数据而被阻碍(block),从而导致训练效率降低。
# 一般来说这个队列的大小会和每一个batch的大小相关,下面一行代码给出了设置队列大小的一种方式。
capacity = 1000 + 3 * batch_size

# 使用tf.train.batch函数来组合样例。[example, label]参数给出了需要组合的元素,
# 一般example和label分别代表训练样本和这个样本对应的正确标签。batch_size参数给出了
# 每个batch中样例的个数。capacity给出了队列的最大容量。每当队列长度等于容量时,
# TensorFlow将暂停入队操作,而只是等待元素出队。当元素个数小于容量时,
# TensorFlow将自动重新启动入队操作。
# example_batch, label_batch = tf.train.batch([example, label], batch_size=batch_size, capacity=capacity)

# 使用tf.train.shuffle_batch函数来组合样例。tf.train.shuffle_batch函数的参数
# 大部分都和tf.train.batch函数相似,但是min_after_dequeue参数是tf.train.shuffle_batch
# 函数特有的。min_after_dequeue参数限制了出队时队列中元素的最少个数。当队列中元素太少时,
# 随机打乱样例顺序的作用就不大了。所以tf.train.shuffle_batch函数提供了限制出队时最少元素的个数
# 来保证随机打乱顺序的作用。当出队函数被调用但是队列中元素不够时,出队操作将等待更多的元素入队
# 才会完成。如果min_after_dequeue参数被设定,capacity也应该相应调整来满足性能需求。
example_batch, label_batch = tf.train.shuffle_batch([example, label], batch_size=batch_size, capacity=capacity, min_after_dequeue=30)

with tf.Session() as sess:
    tf.local_variables_initializer().run()
    tf.global_variables_initializer().run()
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess, coord=coord)

    # 获取并打印组合之后的样例。在真实问题中,这个输出一般会作为神经网络的输入。
    for i in range(2):
        cur_example_batch, cur_label_batch = sess.run([example_batch, label_batch])
        print(cur_example_batch, cur_label_batch)

    coord.request_stop()
    coord.join(threads)

运行结果:

1. 使用tf.train.batch函数来组合样例

?

2. 使用tf.train.shuffle_batch函数来组合样例

?

3. 两个函数的区别

tf.train.batch函数不会随机打乱顺序,而tf.train.shuffle_batch会随机打乱顺序。

原文地址:https://www.cnblogs.com/lyjun/p/10355500.html

时间: 2024-08-29 14:33:47

TensorFlow多线程输入数据处理框架(三)——组合训练数据的相关文章

TensorFlow多线程输入数据处理框架(四)——输入数据处理框架

参考书 <TensorFlow:实战Google深度学习框架>(第2版) 输入数据处理的整个流程. #!/usr/bin/env python # -*- coding: UTF-8 -*- # coding=utf-8 """ @author: Li Tian @contact: [email protected] @software: pycharm @file: sample_data_deal.py @time: 2019/2/8 20:30 @desc:

吴裕雄 python 神经网络——TensorFlow 输入数据处理框架

import tensorflow as tf files = tf.train.match_filenames_once("E:\\MNIST_data\\output.tfrecords") filename_queue = tf.train.string_input_producer(files, shuffle=False) # 读取文件. reader = tf.TFRecordReader() _,serialized_example = reader.read(filen

学霸数据处理项目之数据处理框架开发者手册

写在前面,本文将详细介绍学霸数据处理项目中的数据处理框架中每一个方法的意义及其一些在运行方面需要注意的细节,供开发人员使用,开发人员在阅读相关方法说明时请参照相关代码,对于本文中的错误和疏漏对您造成的不便深表歉意. 一.DataProcess.java 该类是后台处理程序的入口 1)main 该方法是整个处理程序的入口,方法中首先定义了两个文件state.json以及control.json,正如其名字一样,这两个方法的作用是控制该程序的启动和关闭,以及供前端网页界面获取后台处理程序的状态.之后

5种必知的大数据处理框架技术

大数据是收集.整理.处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称.虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性.规模,以及价值在最近几年才经历了大规模扩展. 本文将介绍大数据系统一个最基本的组件:处理框架.处理框架负责对系统中的数据进行计算,例如处理从非易失存储中读取的数据,或处理刚刚摄入到系统中的数据.数据的计算则是指从大量单一数据点中提取信息和见解的过程. 下文将介绍这些框架: · 仅批处理框架: Apache Hadoop · 仅流处

大数据处理框架

说起大数据处理啊,一切都起源于Google公司的经典论文.在当时(2000年左右),由于网页数量急剧增加,Google公司内部平时要编写很多的程序来处理大量的原始数据:爬虫爬到的网页.网页请求日志:计算各种类型的派生数据:倒排索引.网页的各种图结构等等.这些计算在概念上很容易理解,但由于输入数据量很大,单机难以处理.所以需要利用分布式的方式完成计算,并且需要考虑如何进行并行计算.分配数据和处理失败等等问题. 针对这些复杂的问题,Google决定设计一套抽象模型来执行这些简单计算,并隐藏并发.容错

大数据生态之数据处理框架探索

数据处理框架 数据处理是一个非常宽泛的概念,数据处理框架在数据架构中,主要是用于数据移动和分析这两大功能当中.对于数据移动,有离线数据移动和实时数据移动,也可以叫做是批量数据移动和流式数据移动.而对于分析这一块,有离线数据分析和实时数据分析,也可以称作是批量数据分析和流式数据分析.离线和实时,批量和流式,针对这两种不同的形式,就出现了多种不同的数据处理框架.有批量的数据处理框架,有流式的数据处理框架,也有批流融合的框架. 批量数据处理框架 批量数据处理框架最经典的就是 mapreduce 了,这

Linux输入子系统框架分析(1)

在Linux下的输入设备键盘.触摸屏.鼠标等都可以用输入子系统来实现驱动.输入子系统分为三层,核心层和设备驱动层,事件层.核心层和事件层由Linux输入子系统本身实现,设备驱动层由我们实现.我们在设备驱动层将输入事件上报给核心层input.c,核心层找到匹配的事件层,将事件交给事件层处理,事件层处理完后传递到用户空间. 我们最终要搞清楚的是在用户空间调用open和read最终在内核中是怎样处理的,向内核上报的事件又是谁处理的,处理完后是怎样传递到用户空间的? 上面两个图是输入子系统的框架. 下面

企业级应用框架(三)三层架构之数据访问层的改进以及测试DOM的发布

在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层能够支持一切数据访问技术,如Ado.net,EF,linq To Sql,这一点我们实现的不是很完美,仍有很大的改进空间,本文将加以改进. 在此之前我们来看一下我们最新的dom(PS:经过两天的赶工,我们的dom已经相对成熟,其中BLL层已经被我高度抽象化了,并且引进了业务上文文的概念:DAL层除了具体的技术实现尚为完成,其他方面已经相

Android 多线程多任务下载框架的实现(一)

什么是多线程多任务下载框架: Android 多线程多任务下载框架 封装了一个下载工具类,该下载工具支持多线程下载,下载任务队列,下载进度更新,取消下载等.可用于应用市场app的下载,音乐下载等. 为什么需要多线程多任务下载框架: 我们在开发Android 应用市场的时候需要下载apk,这个时候用户希望能同时下载多个apk并且显示正确的进度条信息,且下载速度快,那么我们就需要多线程多任务下载框架来支持这些功能,来达到很好的用户体验. 怎么实现多线程多任务下载框架: 涉及到的知识点: 1.线程操作