【发布时间】:2020-03-18 17:03:48
【问题描述】:
按照this 指南,我偶然发现了这个:为了增加 tf.data 数据集,我们手动使用 map 函数来映射原始数据集的每个图像中的图像转换:
def convert(image, label):
image = tf.image.convert_image_dtype(image, tf.float32) # Cast and normalize the image to [0,1]
return image, label
def augment(image,label):
image,label = convert(image, label)
image = tf.image.convert_image_dtype(image, tf.float32) # Cast and normalize the image to [0,1]
image = tf.image.resize_with_crop_or_pad(image, 34, 34) # Add 6 pixels of padding
image = tf.image.random_crop(image, size=[28, 28, 1]) # Random crop back to 28x28
image = tf.image.random_brightness(image, max_delta=0.5) # Random brightness
return image,label
BATCH_SIZE = 64
# Only use a subset of the data so it's easier to overfit, for this tutorial
NUM_EXAMPLES = 2048
augmented_train_batches = (
train_dataset
# Only train on a subset, so you can quickly see the effect.
.take(NUM_EXAMPLES)
.cache()
.shuffle(num_train_examples//4)
# The augmentation is added here.
.map(augment, num_parallel_calls=AUTOTUNE)
.batch(BATCH_SIZE)
.prefetch(AUTOTUNE)
)
据我所知,它的作用是:它采用原始的train_dataset 并创建一个新的augmented_train_batches 数据集,该数据集具有相同数量的由地图转换改变的图像。之后,它的作用是提供这个数据集像这样进入.fit:
model_with_aug.fit(augmented_train_batches, epochs=50, validation_data=validation_batches)
所以我似乎无法理解的是:不是每个 epoch 之后都应该更改数据,以便(根据文档)我们的模型不会多次看到相同的图像,而且使我们的过拟合几率更低?
在本教程中,augmented_train_batches 不只是一个稍微改变的数据集,它会一遍又一遍地输入到我们的模型中吗?
或者在每个 epoch 之后以某种我无法理解的方式应用增强?
P.S.我认为增强(如果正确完成)必须在每个 epoch 之后以相同的方式更改预转换的数据,而不是继续将转换应用于相同的更改数据集。
【问题讨论】:
标签: python tensorflow machine-learning keras