前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >指南:使用Keras和TensorFlow探索数据增强

指南:使用Keras和TensorFlow探索数据增强

作者头像
用户6543014
发布2019-10-26 17:46:43
1.8K0
发布2019-10-26 17:46:43
举报
文章被收录于专栏:CU技术社区

数据扩充是一种用于通过使用裁剪、填充、翻转等技术来增加数据量的策略。

数据扩充使模型对较小的变化更鲁棒,因此可以防止模型过度拟合。将扩充后的数据存储在内存中既不实际也不高效,这就是Keras的Image Data Generator类(也包含在TensorFlow的高级API:tensorflow.keras中)发挥作用的地方。

Image Data Generator生成具有实时数据增强功能的批量tensor 图像数据。最好的部分是什么?只需一行代码!

生成器生成的输出图像将具有与输入图像相同的输出维度。下面是一个辅助脚本,我们将使用它来可视化显示使用Image Data Generator类可以实现的所有功能。

代码语言:javascript
复制

from tensorflow.keras.preprocessing.image import ImageDataGenerator
from matplotlib.pyplot import imread, imshow, subplots, show


def plot(data_generator):
    """
    Plots 4 images generated by an object of the ImageDataGenerator class.
    """
    data_generator.fit(images)
    image_iterator = data_generator.flow(images)

    # Plot the images given by the iterator
    fig, rows = subplots(nrows=1, ncols=4, figsize=(18,18))
    for row in rows:
        row.imshow(image_iterator.next()[0].astype('int'))
        row.axis('off')
    show()

image = imread("image.jpeg")

# Creating a dataset which contains just one image.
images = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))

imshow(images[0])
show()

1.Rotation

代码语言:javascript
复制
data_generator = ImageDataGenerator(rotation_range=90)
plot(data_generator)

通过指定rotation_range,生成的数据可以随机旋转一个角度,范围为从+ rotation_range到-rotation_range(以度为单位)。

2.Width Shifting

代码语言:javascript
复制
data_generator = ImageDataGenerator(width_shift_range=0.3)
plot(data_generator)

width_shift_range是一个介于0.0到1.0之间的浮点数,它指定图像要向左或向右随机移动的总宽度分数的上限。

3.Height Shifting

代码语言:javascript
复制
data_generator = ImageDataGenerator(height_shift_range=0.3)
plot(data_generator)

就像宽度移动一样,只是图像是垂直移动而不是水平移动。

4.Brightness

代码语言:javascript
复制
data_generator = ImageDataGenerator(brightness_range=(0.1, 0.9))
plot(data_generator)

Brightness_range指定用于随机选择一个亮度偏移值的范围。0.0的亮度对应的是绝对没有亮度,而1.0对应的是最大亮度。

5.Shear Intensity

代码语言:javascript
复制
data_generator = ImageDataGenerator(shear_range=45.0)
plot(data_generator)

Shear Intensity使图像的形状倾斜。这与旋转不同,因为在Shear Intensity中,我们固定一根轴,将图像按照一定的角度进行拉伸,即Shear Intensity。这会在图像中产生某种“拉伸”,这在旋转中是无法看到的。 shear_range以度为单位指定倾斜角度。

6.Zoom

代码语言:javascript
复制
data_generator = ImageDataGenerator(zoom_range=[0.5, 1.5])
plot(data_generator)

通过zoom_range参数获得随机缩放。小于1.0的变焦会放大图像,而大于1.0的变焦会缩小图像。

7.Channel Shift

代码语言:javascript
复制
data_generator = ImageDataGenerator(channel_shift_range=150.0)
plot(data_generator)

Channel Shift将通道值随机移位一个随机值,该值是从channel_shift_range指定的范围中选择的。

8.Horizontal Flip

代码语言:javascript
复制
data_generator = ImageDataGenerator(horizontal_flip=True)
plot(data_generator)

generator将生成图像,这些图像将水平翻转。

9.Vertical Flip

代码语言:javascript
复制
data_generator = ImageDataGenerator(vertical_flip=True)
plot(data_generator)

除了水平翻转外,我们还可以应用垂直翻转。但是那些没有任何价值的点呢?

我们有几个选项,可以选择如何填充这些区域。

1.Nearest

这是默认选项,其中选择最接近的像素值并对所有空值重复该值。(例如,aaaaaaaa | abcd | dddddddd)

代码语言:javascript
复制
data_generator = ImageDataGenerator(width_shift_range=0.3, fill_mode='nearest')
plot(data_generator)

2.Reflect

此模式会创建“反射”,并以与已知值相反的顺序填充空值。(例如abcddcba | abcd | dcbaabcd)

代码语言:javascript
复制
data_generator = ImageDataGenerator(width_shift_range=0.3, fill_mode='reflect')
plot(data_generator)

3.Wrap

除了反射效果,我们还可以通过将已知点的值复制到未知点中,从而保持顺序不变来创建“Wrap”效果。(例如abcdabcd | abcd | abcdabcd)

代码语言:javascript
复制
data_generator = ImageDataGenerator(width_shift_range=0.3, fill_mode='wrap')
plot(data_generator)

4.Constant

如果我们想用常数值填充输入边界之外的所有点,则此模式可以帮助我们准确地实现这一点。常量值由cval参数指定。

代码语言:javascript
复制

data_generator = ImageDataGenerator(width_shift_range=0.3, 
                                    fill_mode='constant', 
                                    cval=190)
plot(data_generator)

此外,还有一些其他好处。一些示例例如数据归零(featurewise_center,samplewise_center)和归一化(featurewise_std_normalization,samplewise_std_normalization)。可以通过将其布尔值传递给Image Data Generator类来设置这些变量。我们还可以通过指定rescale参数来对值进行重新缩放,该参数将与所有值相乘。

另外,还有一个参数preprocessing_function,您可以使用该参数指定自己的自定义函数来执行图像处理。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SACC开源架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档