人工智能|利用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参数来重新缩放值,该参数乘以所有值。

目录
相关文章
|
2月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
将Keras训练好的.hdf5模型转换为TensorFlow的.pb模型,然后再转换为TensorRT支持的.uff格式,并提供了转换代码和测试步骤。
94 3
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
|
17天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
65 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
17天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
55 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
17天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
62 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
74 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
63 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
3月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
110 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
2月前
|
机器学习/深度学习 TensorFlow API
使用 TensorFlow 和 Keras 构建图像分类器
【10月更文挑战第2天】使用 TensorFlow 和 Keras 构建图像分类器
|
2月前
|
机器学习/深度学习 移动开发 TensorFlow
深度学习之格式转换笔记(四):Keras(.h5)模型转化为TensorFlow(.pb)模型
本文介绍了如何使用Python脚本将Keras模型转换为TensorFlow的.pb格式模型,包括加载模型、重命名输出节点和量化等步骤,以便在TensorFlow中进行部署和推理。
93 0
|
16天前
|
机器学习/深度学习 人工智能 物联网
通义灵码在人工智能与机器学习领域的应用
通义灵码不仅在物联网领域表现出色,还在人工智能、机器学习、金融、医疗和教育等领域展现出广泛应用前景。本文探讨了其在这些领域的具体应用,如模型训练、风险评估、医疗影像诊断等,并总结了其提高开发效率、降低门槛、促进合作和推动创新的优势。
通义灵码在人工智能与机器学习领域的应用