首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tf.data.Dataset的增强

tf.data.Dataset的增强
EN

Stack Overflow用户
提问于 2020-03-18 17:03:48
回答 1查看 1.7K关注 0票数 6

按照这里的指南,我偶然发现了以下内容:为了增强tf.data数据集,我们手动使用map函数在原始数据集的每个图像中映射图像转换:

代码语言:javascript
复制
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数据集,该数据集具有相同数量的映射transformations.After更改的图像,它所做的就是像这样将这个数据集输入.fit

代码语言:javascript
复制
model_with_aug.fit(augmented_train_batches, epochs=50, validation_data=validation_batches)

因此,我似乎无法理解的是:数据不是在每一个时代之后都会被改变吗?这样(根据文档),我们的模型就不会不止一次地看到相同的图像,而且会降低我们过度拟合的机会吗?

在本教程中,augmented_train_batches不是只是一个被反复输入到我们的模型中的稍微改变的数据集吗?

或者,在每一个时代之后,以一种我无法理解的方式来应用增强型技术?

我认为增强(如果正确的话)必须在每个时代之后以相同的方式更改预转换的数据,而不是继续将转换应用到相同的更改数据集。

EN

回答 1

Stack Overflow用户

发布于 2020-03-20 09:26:21

是在每一个时代之后以一种我无法理解的方式被应用的增强型?

不,在本教程中,增强只进行一次,而不是在每个时代。当我们想要使用数据增强来训练每个时代生成增广数据的网络时,使用TF Keras图像数据生成器来生成它就更容易了。这将创建一个迭代器,您可以直接向模型提供增广数据。您可以在这个链接中读到更多关于它的内容。

本教程只向您介绍数据增强的基本概念和好处。

请注意本教程的这一部分:

代码语言:javascript
复制
BATCH_SIZE = 64
# Only use a subset of the data so it's easier to overfit, for this tutorial
NUM_EXAMPLES = 2048

它只打算在本教程中使用一个子集的数据,这就是为什么它更容易过度适应,所以这可能是你担心过度拟合的机会更高的原因。

增强是为了获得更多的数据,我们只需要对我们现有的数据集做一些小的修改。小的更改,如翻转、翻译或旋转,您可以使用tf.image并使用映射方法.map()将其应用到数据集中的每个项中。我们的神经网络会认为这些都是不同的图像。

从本教程中,培训非增广数据与培训增强数据只是为了比较和说明差异有多小。

在本例中,增广模型在验证集上收敛到95%的精度。这比没有数据增强的模型略高(+1%)。

我们可以清楚地看到,两者之间并没有太大的差别。但通常情况下,增强是用于将更多修改过的数据提供到数据集中,因此,如果将其与原始数据集组合起来并增加时代的数量,结果可能会产生更大的差异。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60744247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档