内容简介:在也不完全是。我们知道,这个时候,
在 EZDL到底怎样,试试看… 中,我们谈到百度的在线AI设计工具EasyDL不需要调整任何参数,对于用户而言就是一个吃数据的黑盒子。也许系统会选择最优的参数和算法来训练出一个好的模型,如果此时准确率仍然达不到我们的需求,我们是否就完全束手无策了呢?
也不完全是。我们知道, 丰富的高质量数据是训练出好的机器学习模型的关键 。但是良好的数据不会从天上掉下来,靠人工收集数据是一个非常费时费力的工作,关键是,在特定的领域,有效的数据很难获取,比如医学影像数据。
这个时候, 采用一些程序手段扩充数据集就成为了解决数据缺乏的一种方法 ,它可以将训练集的大小增加10倍或更多。更让人鼓舞的是,这样训练出的模型通常会更加健壮,减少过拟合。
数据扩充(Data Augmentation)是指根据一些先验知识,在保持特定信息的前提下,对原始数据进行适当变换以达到扩充数据集的效果。这个其实很好理解,一张猫的图片,对其进行旋转、缩放等变换,我们人类还是能辨认出。具体到图像分类任务中,在保持图像类别不变的前提下,可以对训练集中的每幅图像进行一下变换:
-
一定程度内的随机旋转、平移、缩放、裁剪、填充、左右翻转等,这些变换对应着同一个目标在不同角度的观察结果。
-
对图像中的像素添加噪声扰动,比如椒盐噪声、高斯白噪声等。
-
颜色变换。
-
改变图像的亮度、清晰度、对比度、锐度等。
如果你对图像处理并不是那么熟悉,不用慌张,对于万能的 python 而言,只要有需求,总有人提供程序库,github上就有一个imgaug的python库,下面展示一些图像扩充的样例:
通过数据扩充,我们可以将原来的数据集规模扩大64倍。
这个imgaug库,功能相当强大,文档也还算比较全。如果你觉得引入第三方库太麻烦,也可以考虑keras提供的数据扩充API。
keras图像扩充API
与Keras的其他部分一样,图像增强API简单而强大。
Keras提供了 ImageDataGenerator 类,提供如下功能:
-
样本标准化
-
功能标准化
-
ZCA增白
-
随机旋转,移位,剪切和翻转。
-
尺寸重组
-
将增强的图像保存到磁盘。
以下代码创建 ImageDataGenerator
datagen = ImageDataGenerator()
API不是在内存中对整个图像数据集执行操作,而是训练模型的迭代过程中实时创建增强的图像数据,这可以减少内存开销,但会增加一些额外的训练时间成本。
创建并配置 ImageDataGenerator 后,必须将其应用到数据集上,这将计算实际执行图像数据转换所需的信息,该操作通过调用数据生成器上的 fit()函数 并将其传递给训练数据集来完成。
datagen.fit(train)
数据生成器本身实际上是一个迭代器,在请求时返回批量的图像样本。我们可以通过调用 flow()函数 来配置批量大小并获取批量图像。
X_batch, y_batch = datagen.flow(train, train, batch_size=32)
最后,我们可以使用数据生成器,必须调用fit_generator()函数并传入数据生成器和每个轮次的样本数以及要训练的轮次总数,而不是在我们的模型上调用fit()函数。
fit_generator(datagen, samples_per_epoch=len(train), epochs=100)
更多关于keras图像扩充API的信息,还请参考官方文档:https://keras.io/preprocessing/image/。
参考
-
百面机器学习 - 算法工程师带你去面试,诸葛越主编,人民邮电出版社
-
https://keras.io/preprocessing/image/
-
https://github.com/aleju/imgaug
-
https://machinelearningmastery.com/image-augmentation-deep-learning-keras/
往期回顾
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 为数据中心加速 英特尔扩充FPGA方案
- 英特尔扩充FPGA加速平台产品组合,可为数据中心开发人员提供强大的平台
- K8S安全军规101:对CNCF最佳实践的扩充
- Waterbug间谍组织不断扩充其武器库,还劫持了Oilrig黑客组织的基础设施
- 火星一线 | 币安:BNB新增28个用例,总用例数达到83个,使用场景还在不断扩充
- 4 万字全面掌握数据库、数据仓库、数据集市、数据湖、数据中台
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。