Keras 中的数据增强:我最终得到了多少训练观察结果?

机器算法验证 机器学习 深度学习 卷积神经网络 喀拉斯
2022-04-19 10:23:04

我正在阅读 Francois Chollet 的“使用 Python 进行深度学习”,最近了解到一个我在统计研究中从未遇到过的概念。即,数据增强。我对以下代码的作用有疑问(出现在本书的第 141 页):

train_datagen = ImageDataGenerator(rescale=1./255,
                                   rotation_range=40,
                                   width_shift_range=0.2,
                                   height_shift_range=0.2,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True,)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(train_dir,
                                                    target_size = (150,150)
                                                    batch_size = 32,
                                                    class_mode='binary')

history = model.fit_generator(
     train_generator,
     steps_per_epoch=100,
     epochs=100,
     validation_data=validation_generator,
     validation_steps=50)

我想知道的是 ImageDataGenerator() 是如何工作的。例如,如果我有一个包含 2000 个图像的训练目录,数据增强会创建超过 2000 个观察值来训练吗?我如何知道/控制开发了多少观察?

先感谢您。

1个回答

数据增强用于人为地增加训练集中的样本数量(因为小数据集更容易过拟合)。

Keras 正在使用在线数据增强过程,其中每个图像在每个 epoch 开始时都会被增强(它们可能是分批处理的,但关键是每个 epoch 都会发生一个)。

除了水平翻转(样本数量翻​​倍)之外,所有剩余的增强技术都包含一系列可能的操作。如果您想将此范围视为连续范围,则最终会得到无限量的样本。显然,每个单独的过程实际上是离散的,因此您可以计算可能样本的最终数量,作为所有技术的个体影响的乘积:

在此处输入图像描述

例如,宽度偏移受到图像 x 轴上的像素数的谨慎限制,因此对于 0.2 的值,每个图像最多可以偏移 0.2*x 轴上的像素数,并且偏移可以是向左或向右(所以我们将数字加倍)。* Keras 也有可能执行一些亚像素移位(应该在他们的文档中),但这只是意味着这个数字需要进一步乘以某个因子。

您可以借助 Keras 的源代码对每个操作执行此计算:图像预处理源代码