tensorflow随笔 -QueueRunner
使用基于队列的api实现输入管道,属于数据API。
从文件中读取记录的典型基于队列的管道有以下几个阶段:
1.文件名列表
2.可选的文件名洗牌式重排
3.可选的epoch限制
4.文件名队列
5.文件格式的阅读器
6.一种×××,供读者阅读记录
7.可选的预处理
8.例子队列
文件名、变换和epoch限制
对于文件名列表,可以使用常量字符串张量(如[“file0”, “file1”]或[(“file%d” % i) For i in range(2)])或tf.train.match_filenames_once函数。
将文件名列表传递给tf.train.string_input_producer函数。string_input_producer创建一个FIFO队列,用于保存文件名,直到读者需要它们为止。
string_input_producer有一些选项,可以选择变换和设置最大的epoch数量。队列运行器为每个epoch向队列中添加完整的文件名列表,如果shuffle=True,则在epoch中对文件名进行洗牌式重排。这个过程提供了文件的统一采样,这样示例就不会彼此之间采样不足或过采样。
队列运行程序在一个与从队列中提取文件名的读取器分离的线程中工作,因此洗牌和排队过程不会阻塞读取器。
文件格式
选择与输入文件格式匹配的阅读器,并将文件名队列传递给阅读器的read方法。read方法输出一个标识文件和记录的键(如果有一些奇怪的记录,这对调试很有用)和一个标量字符串值。使用一个(或多个)×××和转换操作将这个字符串解码成构成示例的张量。
CSV文件
要读取逗号分隔值(CSV)格式的文本文件,请使用带有tf.decode_csv操作的tf.TextLineReader。例如:
filename_queue = tf.train.string_input_producer(["file0.csv", "file1.csv"])reader = tf.TextLineReader()
key, value = reader.read(filename_queue)# Default values, in case of empty columns. Also specifies the type of the
# decoded result.
record_defaults = [[1], [1], [1], [1], [1]]
col1, col2, col3, col4, col5 = tf.decode_csv(value, record_defaults=record_defaults)
features = tf.stack([col1, col2, col3, col4])with tf.Session() as sess:# Start populating the filename queue.coord = tf.train.Coordinator()threads = tf.train.start_queue_runners(coord=coord)for i in range(1200):# Retrieve a single instance:example, label = sess.run([features, col5])coord.request_stop()coord.join(threads)
每次执行read都会从文件中读取一行内容。然后,decode_csv op将结果解析为张量列表。record_defaults参数确定产生的张量的类型,如果输入字符串中缺少一个值,则设置要使用的默认值。
你必须调用tf.train.start_queue_runners填充队列,然后调用run或eval执行读取。否则,read在等待队列中的文件名时将阻塞。
要读取每个记录都是固定字节数的二进制文件,usetf.FixedLengthRecordReader与tf.decode_raw操作结合使用。decode_raw op从一个字符串转换为一个uint8张量。
例如,CIFAR-10数据集使用一种文件格式,其中每个记录使用固定字节表示:标签用1字节表示,图像数据用3072字节表示。一旦你有了一个uint8张量,标准的操作可以切下每一块,然后根据需要重新格式化。
类TextLineReader
继承自:ReaderBase
输出用换行符分隔的文件行的阅读器。
从输出中删除换行符。急切的兼容性
读者是不兼容的迫切执行。相反,请使用tf。将数据放入模型中。
属性
reader_ref
实现阅读器的操作。
supports_serialize
阅读器实现是否可以序列化其状态。
init
init(
skip_header_lines=None,
name=None
)
创建一个TextLineReader。
参数:
skip_header_lines:可选int.默认为0。每个文件开头要跳过的行数。
name:操作的名称(可选)。
num_records_produced(name=None)
返回此阅读器生成的记录的数量。
这与已成功执行的读执行次数相同。
参数:
name:操作的名称(可选)。
返回:
一个int64张量。
num_work_units_completed
num_work_units_completed(name=None)
返回此阅读器已完成处理的工作单元数。
参数:
name:操作的名称(可选)。
返回:
一个int64张量。
read
read(
queue,
name=None
)
返回阅读器生成的下一个record (key, value)(记录(键,值))对。
如果需要,将工作单元从队列中取出(例如,当读取器需要从一个新文件开始读取,因为它已经完成了前一个文件)。
参数:
queue: 表示队列句柄的队列或可变字符串张量,带有字符串工作项。
name: 操作的名称(可选)。
返回:
张量元组 (key, value)。key:一个字符串标量张量。key:一个字符串标量张量。
read_up_to
read_up_to(
queue,
num_records,
name=None
)
返回由阅读器生成的num_records (key, value)对。
如果需要,将工作单元从队列中取出(例如,当读取器需要从一个新文件开始读取时,因为它已经完成了前一个文件)。甚至在最后一批之前,它可能返回小于num_records的结果。
参数:
queue:表示队列句柄的队列或可变字符串张量,带有字符串工作项。
num_records:要读取的记录数量。
name: 操作的名称(可选)。
返回:
张量元组 (key, value)。key:一个字符串标量张量。key:一个字符串标量张量。
reset
reset(name=None)
将阅读器恢复到初始的清洁状态。
参数:
name:操作的名称(可选)。
返回:
创建操作。
restore_state
restore_state(
state,
name=None
)
将读取器恢复到先前保存的状态。
并不是所有的阅读器都支持被还原,因此这会产生一个未实现的错误。
参数:
state:字符串张量。匹配类型的阅读器的序列化状态的结果。
name:操作的名称(可选)。
返回:
创建操作。
serialize_state
serialize_state(name=None)
生成一个字符串张量来编码读取器的状态。
并不是所有的阅读器都支持序列化,因此这会产生未实现的错误。
参数:
name:操作的名称(可选)。
返回:
一个字符串张量。
tensorflow随笔 -QueueRunner相关推荐
- tensorflow随笔-队列管理器QueueRunner-生产者与消费者
# -*- coding: utf-8 -*- """ Spyder EditorThis is a temporary script file. "" ...
- tensorflow quene queueRunner
转自:http://blog.csdn.net/lujiandong1/article/details/53369961 队列本身也是图中的一个节点.其他节点(enqueue, dequeue)可以修 ...
- tensorflow随笔-随机数
Aliases: tf.compat.v1.random.normal tf.compat.v1.random_normal tf.compat.v2.random.normal tf.random_ ...
- tensorflow随笔-读取图像文件数据(2)-TFRecord
写文件 代码如下 # -*- coding: utf-8 -*- """ Created on Tue May 7 18:29:30 2019@author: liuxi ...
- tensorflow随笔-读取图像文件数据(1)
# -*- coding: utf-8 -*- """ Created on Tue May 7 18:29:30 2019@author: liuxing @email ...
- tensorflow随笔-constant
# -*- coding: utf-8 -*-import tensorflow as tf import numpy as np a=tf.constant(np.array([[6,2]],dty ...
- tensorflow随笔-条件循环控制(4)
例如非严格语义的示例:在下面的示例中,计数器i的最终值不依赖于x.while_loop可并行地增加计数器,并更新x. #!/usr/bin/env python2 # -*- coding: utf- ...
- tensorflow随笔-条件循环控制(2)
tf.count_up_to tf.count_up_to( ref, limit, name=None ) 增加"ref"直到它达到"limit" 参数: r ...
- tensorflow随笔-队列(1)
tf.FIFOQueue Class FIFOQueue 先进先出的队列 属性 dtypes 队列元素的每个组件的dtypes列表 name 队列名字 基础队列的名称. names 队列元素的每个组件 ...
最新文章
- linux 修改java版本_Linux 有问必答:如何在 Linux 中改变默认的 Java 版本
- 传统的6d位姿估计fangfa1_基于改进的点对特征的6D位姿估计
- 有关java的读书软件吗_我手机没JAVA,能用什么读书软件、
- HTTP请求与接收get/post方式
- 20160331数据文件offline与open resetlogs2
- 4还是火箭弹好 rust_做人还是“软”一些好!身体这4个地方越硬越危险,看看你有没有...
- 02-05 从c到c++
- matlab2016一条命令设置坐标轴标签旋转角度、字体大小和字体!
- java编程 数组的中位数中枢_Java算法题1:找出两个有序数组的中位数?
- ANALOG ADP5092 微瓦级能量采集模块
- 清除Conficker蠕虫病毒详细步骤
- c语言日程报告闹钟,可以闹钟提醒的日程表,日程闹钟提醒怎么弄
- Word打印目录或另存为PDF时出现“错误!未定义书签!”的解决办法
- scrapy框架—spiders
- MySQL中GA、RC、Alpha的区别
- (筆記) 如何在字串中從指定字元抓到指定字元(pointer版)? (C/C++) (C)
- JVM内存和垃圾回收-12.String Table
- 程序员浪漫之微信烟花
- 常微分方程(Ordinary differential equation)
- 评中药:就这样被慢慢毒死
热门文章
- 《数据结构与算法分析—Java语言描述》pdf
- 又一次的Microsoft Visual C++ 10.0 is required (Unable to find vcvarsall.bat)
- 批处理——服务器的web文件备份
- jquery 如何保存拖动空间的位置
- MapReduce实现Apriori算法
- (转载)Shutter 0.90 发布 – BUG修复和增强
- 麦迪时刻的视频和图片
- 学会利用杠杆,阻碍你成功的,或许恰恰是你认为正确的思维,能力、效率、杠杆三个因素,决定了你一生的发展...
- html页面展示Json样式
- inteliji 优化