本文对tf.data.Dataset.interleave该方法做点笔记。
在tensorflow中数据处理通道中,有一个方法interleave,tf定义如下:
interleave(
map_func, cycle_length=AUTOTUNE, block_length=1, num_parallel_calls=None
)
'''
cycle_length和block_length参数控制元素的生成顺序。
cycle_length控制同时处理的输入元素的数量。 如果将cycle_length设置为1,则此转换将一次处理一个输入元素,并将产生与tf.data.Dataset.flat_map相同的结果。
通常,此转换将map_func应用于cycle_length输入元素,在返回的Dataset对象上打开迭代器,并在它们之间循环,从每个迭代器中生成block_length个连续元素,并在每次到达迭代器末尾时使用下一个输入元素。
'''
先上理解:通过实验,并从方法命名中体会到,该方法的目的是,提供读取数据集内容的方法。
1.如何读取数据集内容?
两个例子:
eg1:
import tensorflow as tf
ds=tf.data.Dataset.range(1,4) #[1,2,3]
ds=ds.interleave(lambda x: tf.data.Dataset.from_tensors(x).repeat(5),
cycle_length=3, block_length=2)
for d in ds:
tf.print(d)
'''
output:
1
1
2
2
3
3
1
1
2
2
3
3
1
2
3
'''
ds=tf.data.Dataset.range(1,4) #[1,2,3]
ds=ds.interleave(lambda x: tf.data.Dataset.from_tensors(x).repeat(5),
cycle_length=3, block_length=2)
for d in ds:
tf.print(d)
'''
output:
1
1
1
2
2
2
3
3
3
1
1
2
2
3
3
'''
eg2:
import tensorflow as tf
files = tf.data.Dataset.list_files("path_to_dataset/train-*.tfrecord")#符合该模式的所有tfrecord文件并组成Dataset
dataset = files.interleave(tf.data.TFRecordDataset)#将Dataset中每个元素(即每个tfrecord文件)用TFRecordDataset读取,并迭代输出元素中的内容直至内容迭代完毕,继续读取下一个元素。
dataset = dataset.map(map_func=parse_fn)#对每次经过interleave处理的内容解析,即解析tfrecord内容。
reference:
[1] https://tensorflow.google.cn/versions/r1.15/api_docs/python/tf/data/Dataset?hl=en