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

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

问题描述

数据增强是一种通过使用裁剪、填充、翻转等技术来增加数据量的策略。数据增强使模型对微小变化更为稳健,从而防止模型过度拟合。将扩充后的数据存储在内存中既不实用也不高效,这就是keras中的imagedatagenerator类(也包括在tensorflow的高级api:tensorflow.keras中)发挥作用的地方。imagedatagenerator通过实时数据扩充生成成批张量图像数据。由生成器生成的输出图像将具有与输入图像相同的输出尺寸

解决方案

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

from  tensorflow.keras.preprocessing.image import ImageDataGenerator

from 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 image

images=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参数来重新缩放值,该参数乘以所有值。

目录
相关文章
|
算法框架/工具 机器学习/深度学习 算法
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(三)(2)
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(三)
30 0
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(三)(2)
|
12天前
|
机器学习/深度学习 人工智能 算法框架/工具
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(八)(4)
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(八)
27 0
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(八)(4)
|
12天前
|
机器学习/深度学习 算法框架/工具 TensorFlow
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(七)(4)
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(七)
45 0
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(七)(4)
|
机器学习/深度学习 算法 算法框架/工具
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(七)(3)
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(七)
13 0
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(七)(3)
|
12天前
|
机器学习/深度学习 算法框架/工具 自然语言处理
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(七)(1)
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(七)
31 0
|
12天前
|
机器学习/深度学习 算法框架/工具 TensorFlow
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(五)(3)
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(五)
9 0
|
机器学习/深度学习 算法框架/工具 Python
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(五)(2)
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(五)
26 0
|
12天前
|
机器学习/深度学习 算法框架/工具 Python
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(五)(1)
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(五)
36 0
|
机器学习/深度学习 算法框架/工具 API
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(四)(1)
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(四)
10 0
|
12天前
|
数据挖掘 算法 机器学习/深度学习
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(三)(4)
Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(三)
32 0

热门文章

最新文章