在机器学习、深度学习和人工智能领域,大量数据的需求是不言而喻的。然而,在许多情况下,并不总是能够获取到足够的数据。因此,数据增强技术应运而生。本文将深入探讨数据增强的概念、其在训练机器学习模型中的关键作用,以及如何实现这一技术。
数据增强可以定义为通过轻微修改已有数据或基于现有数据创建新的合成数据来提高数据多样性的技术。它有助于规范数据,减少过拟合现象。以下是一些常用的数据增强技术:
数据增强在训练机器学习模型时扮演着至关重要的角色。主要可以通过以下三种方式应用数据增强技术:
在线数据增强是机器学习模型中默认使用的数据增强方式,它随机选取训练数据中的图像,并应用数据增强技术。模型基于原始数据进行训练,其中图像是随机增强的。在这种情况下,增强的图像不会被保存在任何地方,也无法知道哪些图像被增强了。
深度学习模型已经使用了在线数据增强,如旋转、翻转、剪切、亮度范围等,这些技术在模型拟合前随机应用于训练数据。这种技术不会在磁盘上保存任何数据,而是实时预处理图像。
离线数据增强允许程序员将增强的图像保存在磁盘上。可以用于在线数据增强的技术也可以用来执行离线数据增强,其中图像被保存在磁盘上,因此被称为离线数据增强。通过在每个训练图像上应用数据增强技术来获得增强的图像,这使得数据集更加多样化,模型更加健壮。这个过程可以用来增加数据集中的图像数量。
正如其名,结合使用离线和在线数据增强意味着同时采用这两种方式来分析数据。获得的增强图像与原始数据集混合,然后在训练机器学习模型之前实时进行数据增强。这种方法通常用于游戏领域或当可用数据不清晰时。在第三种数据增强的情况下,技术在离线和在线模式下都被应用。图像在离线数据增强期间被保存在磁盘上,然后与原始数据集混合,接着应用在线数据增强。
数据增强可以应用于单个图像或一次应用到多个图像。使用数据增强可以产生无限数量的图像。以下示例展示了如果将数据增强应用于单个图像的结果。
如上图所示,一个图像可以用来生成五个图像。这些图像是通过轻微修改现有图像获得的。以下是从文件夹中获取多个图像的数据增强的详细代码:
from keras.preprocessing.image import ImageDataGenerator
from skimage import io
datagen = ImageDataGenerator(
rotation_range = 40,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True,
brightness_range = (0.5, 1.5))
import numpy as np
import os
from PIL import Image
image_directory = r'C:Users---train/'
SIZE = 224
dataset = []
my_images = os.listdir(image_directory)
for i, image_name in enumerate(my_images):
if (image_name.split('.')[1] == 'jpg'):
image = io.imread(image_directory + image_name)
image = Image.fromarray(image, 'RGB')
image = image.resize((SIZE,SIZE))
dataset.append(np.array(image))
x = np.array(dataset)
i = 0
for batch in datagen.flow(x, batch_size=16,
save_to_dir= r'C:Users---Augmented-images',
save_prefix='dr',
save_format='jpg'):
i += 1
if i > 50:
break
图像数据生成器从Keras导入,用于在训练数据上实现数据增强。其他模块如‘os’、‘numpy’、‘io’、Image被导入以实现代码。然后,增强技术被应用于每张图像,这些图像后来被保存到程序员指定的目录中。“image_directory”获取原始数据集的路径,“size”决定了数据集中图像的大小。“save_prefix”用于命名增强的图像,“save_format”决定了增强图像的格式,可以是jpeg、png、tiff等。
执行代码后,图像被保存到名为‘Augmented-images’的新文件夹中,图像被命名为‘dr’并以‘JPEG’格式保存。这段代码可以在许多数据不清晰或不足的领域中使用。‘if’循环用于确定‘for’循环需要迭代的次数。