前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >人工智能|利用keras和tensorflow探索数据增强

人工智能|利用keras和tensorflow探索数据增强

作者头像
算法与编程之美
发布2019-12-02 13:49:42
1.1K0
发布2019-12-02 13:49:42
举报

问题描述

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

数据增强使模型对微小变化更为稳健,从而防止模型过度拟合。

将扩充后的数据存储在内存中既不实用也不高效,这就是keras中的imagedatagenerator类(也包括在tensorflow的高级api:tensorflow.keras中)发挥作用的地方。imagedatagenerator通过实时数据扩充生成成批张量图像数据。

由生成器生成的输出图像将具有与输入图像相同的输出尺寸

解决方案

下面是一个辅助脚本,我们将使用它来直观地显示使用ImageDataGenerator类可以实现的所有内容。

from tensorflow.keras.preprocessing.image import ImageDataGeneratorfrom matplotlib.pylot 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) fig, rows = subplots(nrows=1, ncols=4 , figsize=(18,18)) for row in rows: row.imshow(image_iterator.next()[0].astype('int')) row.asis('off') show() image=imread("image.jpeg") #Creating a dataset which contains just one imageimages=image.reshape((1,image.shape[0],image.shape[1],image.shape[2])) imshow(image[0])show()

1、旋转(Rotation)

通过指定rotation_range(旋转角度),生成的数据的随机旋转角度范围在+rotation range 到 -rotation_ range(以度为单位)。

data_generator = ImageDataGenerator(rotation_range=90)plot(data_generator)

2.宽度偏移(Width Shifting)

width_ shift_ range(宽度移位)范围是一个介于0.0和1.0之间的浮点数,它指定图像将随机向左或向右移位的总宽度部分的上限。

data_generator = ImageDataGenerator(width_shift_range=0.3)plot(data_generator)

3、高度偏移(Height Shifting)

与宽度移动完全相同,只是图像是垂直移动而不是水平移动。

data_generator = ImageDataGenerator(height_shift_range=0.3)plot(data_generator)

4、亮度(Brightness)

brightness_ range(亮度范围)指定从中随机选取亮度偏移值的范围。0的亮度相当于绝对没有亮度,1对应于最大亮度。

data_generator = ImageDataGenerator(brightness_range=(0.1,0.9))plot(data_generator)

5、剪切(Shear Intensity)

剪切变换使图像的形状倾斜。这与旋转中的不同,在剪切变换中,我们固定一个轴并将图像以一定的角度拉伸,称为剪切角。这会在图像中创建一种“拉伸”,这在旋转中是看不到的。shear_range以度为单位指定倾斜角度。

data_generator = ImageDataGenerator(shear_range=45.0)plot(data_generator)

6、缩放(Zoom)

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

data_generator = ImageDataGenerator(zoom_range=[0.5,1.5])plot(data_generator)

7、通道位移(Channel Shift)

通道移位通过从channel _shift_range(通道移位范围)指定的范围中选择的随机值随机移位通道值。

data_generator = ImageDataGenerator(channel_shift_range=150.0)plot(data_generator)

8、水平翻转(Horizontal Flip)

生成器将生成图像,这些图像将随机水平翻转。

data_generator = ImageDataGenerator(horizontal_flip=True)plot(data_generator)

9、垂直翻转(Vertical Filp)

与水平翻转相反,我们也可以应用垂直翻转

data_generator = ImageDataGenerator(vertical_flip=True)plot(data_generator)

结语

如何填充没有的区域?

有几个选择,其中我们可以选择如何填补这些地区

1、相似填充(Nearest)

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

data_generator = ImageDataGenerator(width_shift_range=0.3,fill_mode='nearest')plot(data_generator)

2、反射填充(Reflect)

此模式创建“Reflect”并按已知值的相反顺序填充空值。

(例如abcddcba|abcd|dcbaabcd)

data_generator = ImageDataGenerator(width_shift_range=0.3,fill_mode='reflect')plot(data_generator)

3、包裹填充(Wrap)

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

data_generator = ImageDataGenerator(width_shift_range=0.3,fill_mode='wrap')plot(data_generator)

4、常量填充(Constant)

如果想用一个常量值填充输入边界之外的所有点,这个模式可以帮助自己实现这一点。常量值由cval参数指定。

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

更多

你可以直接利用这个类,有一些额外的优势。

例如

1.数据归零(featurewise_center,samplewise_center)

2.规范化(featurewise_std_normalization, samplewise_std_normalization)。

可以通过将这些变量的布尔值传递给ImageDataGenerator类来设置这些变量。

还可以通过指定rescale参数来重新缩放值,该参数乘以所有值。

实习 编辑 | 贾婧媛

责 编 | 官学琦

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

本文分享自 算法与编程之美 微信公众号,前往查看

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

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

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