用法
interleave(
map_func, cycle_length=None, block_length=None, num_parallel_calls=None,
deterministic=None, name=None
)
参数
-
map_func
一个接受数据集元素并返回tf.data.Dataset
的函数。 -
cycle_length
(可选。)将同时处理的输入元素的数量。如果未设置,则 tf.data 运行时会根据可用的 CPU 决定它应该是什么。如果num_parallel_calls
设置为tf.data.AUTOTUNE
,则cycle_length
参数标识最大并行度。 -
block_length
(可选。)在循环到另一个输入元素之前从每个输入元素生成的连续元素的数量。如果未设置,则默认为 1。 -
num_parallel_calls
(可选。)如果指定,则实现创建一个线程池,用于从循环元素异步和并行获取输入。默认行为是同步地从循环元素中获取输入,没有并行性。如果使用值tf.data.AUTOTUNE
,则并行调用的数量根据可用的 CPU 动态设置。 -
deterministic
(可选。)指定num_parallel_calls
时,如果指定了此布尔值(True
或False
),它将控制转换生成元素的顺序。如果设置为False
,则允许转换产生无序元素,以用确定性换取性能。如果未指定,则tf.data.Options.deterministic
选项(默认为True
)控制行为。 -
name
(可选。) tf.data 操作的名称。
返回
-
Dataset
一个Dataset
。
跨此数据集映射map_func
,并交错结果。
类型签名是:
def interleave(
self:Dataset[T],
map_func:Callable[[T], Dataset[S]]
) -> Dataset[S]
例如,您可以使用 Dataset.interleave()
来同时处理多个输入文件:
# Preprocess 4 files concurrently, and interleave blocks of 16 records
# from each file.
filenames = ["/var/data/file1.txt", "/var/data/file2.txt",
"/var/data/file3.txt", "/var/data/file4.txt"]
dataset = tf.data.Dataset.from_tensor_slices(filenames)
def parse_fn(filename):
return tf.data.Dataset.range(10)
dataset = dataset.interleave(lambda x:
tf.data.TextLineDataset(x).map(parse_fn, num_parallel_calls=1),
cycle_length=4, block_length=16)
cycle_length
和 block_length
参数控制生成元素的顺序。 cycle_length
控制同时处理的输入元素的数量。如果将 cycle_length
设置为 1,则此转换将一次处理一个输入元素,并将产生与 tf.data.Dataset.flat_map
相同的结果。通常,此转换会将map_func
应用于cycle_length
输入元素,在返回的Dataset
对象上打开迭代器,并在它们之间循环,从每个迭代器生成block_length
连续元素,并在每次执行时消耗下一个输入元素到达迭代器的末尾。
例如:
dataset = Dataset.range(1, 6) # ==> [ 1, 2, 3, 4, 5 ]
# NOTE:New lines indicate "block" boundaries.
dataset = dataset.interleave(
lambda x:Dataset.from_tensors(x).repeat(6),
cycle_length=2, block_length=4)
list(dataset.as_numpy_iterator())
[1, 1, 1, 1,
2, 2, 2, 2,
1, 1,
2, 2,
3, 3, 3, 3,
4, 4, 4, 4,
3, 3,
4, 4,
5, 5, 5, 5,
5, 5]
注意:只要 map_func
是纯函数且 deterministic=True
,此转换产生的元素的顺序是确定的。如果map_func
包含任何有状态操作,则访问该状态的顺序是未定义的。
性能通常可以通过设置num_parallel_calls
来提高,这样interleave
将使用多个线程来获取元素。如果不需要确定性,设置 deterministic=False
也可以提高性能。
filenames = ["/var/data/file1.txt", "/var/data/file2.txt",
"/var/data/file3.txt", "/var/data/file4.txt"]
dataset = tf.data.Dataset.from_tensor_slices(filenames)
dataset = dataset.interleave(lambda x:tf.data.TFRecordDataset(x),
cycle_length=4, num_parallel_calls=tf.data.AUTOTUNE,
deterministic=False)
相关用法
- Python tf.data.TFRecordDataset.filter用法及代码示例
- Python tf.data.TFRecordDataset.random用法及代码示例
- Python tf.data.TFRecordDataset.zip用法及代码示例
- Python tf.data.TFRecordDataset.choose_from_datasets用法及代码示例
- Python tf.data.TFRecordDataset.apply用法及代码示例
- Python tf.data.TFRecordDataset.rejection_resample用法及代码示例
- Python tf.data.TFRecordDataset.flat_map用法及代码示例
- Python tf.data.TFRecordDataset.shard用法及代码示例
- Python tf.data.TFRecordDataset.unique用法及代码示例
- Python tf.data.TFRecordDataset.scan用法及代码示例
- Python tf.data.TFRecordDataset.cardinality用法及代码示例
- Python tf.data.TFRecordDataset.group_by_window用法及代码示例
- Python tf.data.TFRecordDataset.cache用法及代码示例
- Python tf.data.TFRecordDataset.range用法及代码示例
- Python tf.data.TFRecordDataset.reduce用法及代码示例
- Python tf.data.TFRecordDataset.take_while用法及代码示例
- Python tf.data.TFRecordDataset.snapshot用法及代码示例
- Python tf.data.TFRecordDataset.with_options用法及代码示例
- Python tf.data.TFRecordDataset.unbatch用法及代码示例
- Python tf.data.TFRecordDataset.repeat用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.data.TFRecordDataset.interleave。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。