tensorflow随笔-reader(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010255642/article/details/82755839

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张量。

猜你喜欢

转载自blog.csdn.net/u010255642/article/details/82755839