TF Dataset API:以下顺序是不是正确?地图、缓存、随机播放、批处理、重复、预取
Posted
技术标签:
【中文标题】TF Dataset API:以下顺序是不是正确?地图、缓存、随机播放、批处理、重复、预取【英文标题】:TF Dataset API: Is the following sequence correct? map,cache,shuffle,batch,repeat,prefetchTF Dataset API:以下顺序是否正确?地图、缓存、随机播放、批处理、重复、预取 【发布时间】:2018-12-31 07:38:11 【问题描述】:我正在使用此序列从磁盘读取图像文件并输入 TF Keras 模型。
#Make dataset for training
dataset_train = tf.data.Dataset.from_tensor_slices((file_ids_training,file_names_training))
dataset_train = dataset_train.flat_map(lambda file_id,file_name: tf.data.Dataset.from_tensor_slices(
tuple (tf.py_func(_get_data_for_dataset, [file_id,file_name], [tf.float32,tf.float32]))))
dataset_train = dataset_train.cache()
dataset_train= dataset_train.shuffle(buffer_size=train_buffer_size)
dataset_train= dataset_train.batch(train_batch_size) #Make dataset, shuffle, and create batches
dataset_train= dataset_train.repeat()
dataset_train = dataset_train.prefetch(1)
dataset_train_iterator = dataset_train.make_one_shot_iterator()
get_train_batch = dataset_train_iterator.get_next()
我对这是否是最佳序列有疑问。 例如repeat 应该在shuffle() 之后batch() 之前吗?cache() 应该在batch 之后吗?
【问题讨论】:
非常感谢@mrry 或其他人的澄清。具体来说,我想知道在 .batch 方法之前和之后保持重复之间的区别。例如,如果我在 .batch 之后保留 .repeat,它会重复洗牌批次还是重复洗牌数据? 我也想知道命令如何影响命令。例如,prefetch
根据出现的顺序预取什么。如果我会执行.batch().prefetch(2)
,这是否意味着预取了 2 个批次或仍然是 2 个样本? (这只是一个示例,我正在为所有重要顺序中的所有命令寻求一般解释)。
我个人没有在当前接受的答案中看到您的问题得到回答。只要它保持“已回答”状态,我就不会看到像 @mrry 这样的人进来并添加完整的答案。
[TF 2.0 文档] (tensorflow.org/versions/r2.0/api_docs/python/tf/data/…) 注意:与其他 Dataset 方法一样,prefetch 对输入数据集的元素进行操作。它没有示例与批次的概念。 examples.prefetch(2) 将预取两个元素(2 个示例),而 examples.batch(20).prefetch(2) 将预取 2 个元素(2 个批次,每个批次 20 个示例)。
【参考方案1】:
Output differences when changing order of batch(), shuffle() and repeat() 的答案建议在批处理之前重复或随机播放。我经常使用的顺序是(1)随机播放,(2)重复,(3)映射,(4)批处理,但它可以根据您的喜好而有所不同。我在重复之前使用 shuffle 以避免模糊时代边界。我在批处理之前使用 map,因为我的映射函数适用于单个示例(而不是批处理示例),但是您当然可以编写一个矢量化的 map 函数,并希望将批处理视为输入。
【讨论】:
谁能指出一个经过矢量化并将批次作为输入的地图示例? 请注意这是否回答了您的问题@maurice,但 tf.data.experimental.unbatch() 适用于整个数据集,因此在某种意义上矢量化:dataset.apply(tf.data.experimental .unbatch())以上是关于TF Dataset API:以下顺序是不是正确?地图、缓存、随机播放、批处理、重复、预取的主要内容,如果未能解决你的问题,请参考以下文章
Tensorflow:如何查找 tf.data.Dataset API 对象的大小
如何使用 DataSet API 在 Tensorflow 中为 tf.train.SequenceExample 数据创建填充批次?
如何使用 TF1.3 中的新 Dataset api 映射具有附加参数的函数?