1. tf.contrib.data.map_and_batch
tf.contrib.data.map_and_batch(
map_func,
batch_size,
num_parallel_batches=None,
drop_remainder=False,
num_parallel_calls=None
)
复合实现map和batch。
map_func横跨dataset的batch_size个连续元素,然后将它们组合成一个batch。在功能上,它相当于map 后面跟着batch。但是,通过将两个转换融合在一起,实现可以更有效。在API中展示此转换是暂时的。一旦自动输入管道的优化实现了,map和batch的融合会自动发生,这个API将被弃用。
参数:
map_func:将tensor的嵌套结构映射到另一个tensor嵌套结构的函数。
batch_size:tf.int64,标量tf.Tensor,表示要在此数据集合并的单个batch中的连续元素数。
num_parallel_batches:(可选)tf.int64,标量tf.Tensor,表示要并行创建的batch数。一方面,较高的值可以帮助减轻落后者的影响。另一方面,如果CPU空闲,较高的值可能会增加竞争。
drop_remainder:(可选)tf.bool,标量tf.Tensor,表示是否应丢弃最后一个batch,以防其大小小于所需值; 默认行为是不删除较小的batch。
num_parallel_calls:(可选)tf.int32,标量tf.Tensor,表示要并行处理的元素数。如果未指定,则将并行处理batch_size * num_parallel_batches个元素。
返回:
一个Dataset转换函数,它可以传递给 tf.data.Dataset.apply。
2. tf.contrib.data.parallel_interleave
tf.contrib.data.parallel_interleave(
map_func,
cycle_length,
block_length=1,
sloppy=False,
buffer_output_elements=None,
prefetch_input_elements=None
)
Dataset.interleave()变换的并行版本。
parallel_interleave()映射map_func通过输入以生成嵌套数据集,并且输出其元素隔行交错。与tf.data.Dataset.interleave不同的是 ,它从cycle_length嵌套数据集中并行的获取元素,从而增加了吞吐量,尤其是在存在落后者的情况下。此外,sloppy参数可以用来提高性能,通过放宽在确定性顺序中产生输出的要求,并允许实现跳过在请求时数据元素未准备好的嵌套数据集。
用法示例:
# Preprocess 4 files concurrently.
filenames = tf.data.Dataset.list_files("/path/to/data/train*.tfrecords")
dataset = filenames.apply(
tf.contrib.data.parallel_interleave(
lambda filename: tf.data.TFRecordDataset(filename),
cycle_length=4))
警告:如果sloppy是True,则生成的元素的顺序不确定。
参数:
map_func:一个函数,将嵌套结构的tensor映射到一个Dataset。
cycle_length:Dataset并行交错输入的数量。
block_length:Dataset在前进到下一个输入之前从输入Dataset中拉出的连续元素的数量 。
sloppy:如果为false,则元素以确定的顺序生成。否则,为了方便起见,允许以非确定性顺序生成元素。
buffer_output_elements:应该缓冲的每个迭代器交错的元素数量(每个交叉迭代器的转换,类似于.prefetch())。
prefetch_input_elements:在需要交错之前,转换为迭代器的输入元素的数量。
返回:
一个Dataset转换函数,它可以传递给 tf.data.Dataset.apply。