使用 Tensorflow 的 Estimator API,我应该在管道中的哪个点执行数据增强?
根据这个官方Tensorflow 指南,执行数据增强的一个地方是input_fn
:
def parse_fn(example):
"Parse TFExample records and perform simple data augmentation."
example_fmt = {
"image": tf.FixedLengthFeature((), tf.string, ""),
"label": tf.FixedLengthFeature((), tf.int64, -1)
}
parsed = tf.parse_single_example(example, example_fmt)
image = tf.image.decode_image(parsed["image"])
# augments image using slice, reshape, resize_bilinear
# |
# |
# |
# v
image = _augment_helper(image)
return image, parsed["label"]
def input_fn():
files = tf.data.Dataset.list_files("/path/to/dataset/train-*.tfrecord")
dataset = files.interleave(tf.data.TFRecordDataset)
dataset = dataset.map(map_func=parse_fn)
# ...
return dataset
我的问题
如果我在内部执行数据增强input_fn
,是否parse_fn
返回单个示例或包含原始输入图像 + 所有增强变体的批次?如果它应该只返回一个 [augmented] 示例,我如何确保数据集中的所有图像都以其未增强的形式以及所有变体使用?