欢迎关注 “小白玩转Python”,发现更多 “有趣”
在使用神经网络和深度学习模型时,需要进行数据准备。对于更复杂的物体识别任务,也越来越需要增加数据量。
数据增加意味着增加数据量。换句话说,拥有更大的数据集意味着更健壮的模型。但是获取更多的数据并不总是那么容易,而且可能存在存储数据并将其提供给模型的问题。
为了缓解这个问题,我们可以通过做一些修改手动增加数据,或者我们可以使用一个 Keras 图像预处理类,只需几行代码就可以做到这一点。
在这篇文章中,我们将看到在使用 Keras 开发和评估 Python 中的深度学习模型时,如何使用图像数据集进行数据准备和数据增强。
读完这篇文章,你就会知道:
1. 关于Keras提供的图像增强API以及如何在模型中使用它。如何执行特征标准化;
2. 如何对图像执行 ZCA 白化;
3. 如何对图像数据随机旋转,移位和翻转增强;
4. 如何将增强图像数据保存到磁盘。
图像增强 API:ImageDataGenerator
它从原始批处理中生成批处理的增强数据。该算法首先对图像进行随机变换,然后生成一批新的图像进行训练。
注意: 这里需要注意的一点是 ImageDataGenerator 不返回原始图像,而只返回一批增强数据,这是对原始数据进行某些转换的结果。
加载数据集
我们将使用 MNIST 手写数字识别进行数据增强。执行下面的代码将从 keras.datasets 加载 MNIST 数据集:
将数据分解成训练街和测试集
像素标准化
像素标准化在两个级别上得到支持:每个图像(称为样本级)或每个数据集(称为特征级)。具体来说,标准化像素值所需的平均值和/或平均值和标准差统计量可以仅从每张图像中的像素值计算(按样本计算) ,也可以从整个训练数据集中计算(按特征计算)。
您可以通过在 ImageDataGenerator 类上设置 featurewise_center 和 featurewise_std_normalization 参数来执行标准化过程。
运行这个例子,您可以看到效果是不同的,似乎暗淡和亮化不同的数字。
ZCA 白化
图像的白化变换是一个线性代数运算,它减少了像素图像矩阵中的冗余。通常,图像增白是使用主成分分析分析技术进行的。最近,一种叫做 ZCA 的方法显示了更好的结果,在变换后的图像中保留了所有的原始维度,不像 PCA,结果变换后的图像仍然看起来像原始图像。
随机旋转
您可以训练您的模型,以更好地在训练期间人为处理数据集中图像旋转和随机旋转。下面的示例通过设置 rotation _ range 参数创建 MNIST 数字最高90度的随机旋转。
你可以看到图像被左右旋转到90度的极限。这对这个问题没有帮助,因为 MNIST 的数字有一个规范化的方向,但是这种转换可能有助于从物体可能有不同方向的照片中学习。
随机平移
图像中的对象可能不在框架中心。它们可能在各种不同的方面偏离中心。您可以通过人工创建训练数据的平移版本来训练深度学习网络。Keras 支持通过 width_shift_range 和 height_shift_range 参数对训练数据进行水平和垂直随机平移。
同样,由于手写数字已经居中,这对于 MNIST 来说是不必要的,但是您可以看到这在更复杂的问题域中是多么有用。
随机翻转
另一个增强图像数据的方法是在训练数据中创建随机的图像翻转,这样可以提高处理大型复杂问题的性能。Keras 支持使用 vertical_flip 和 horizontal_flip 参数沿垂直轴和水平轴进行随机翻转。
翻转数字不是很有用,因为它们总是有正确的左右方向,但是对于场景中可能有不同方向的物体的照片来说,这可能是有用的。
· END ·
HAPPY LIFE