打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
人工智能|利用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参数来重新缩放值,该参数乘以所有值。
END实习 编辑   | 贾婧媛
责       编   | 官学琦
where2go 团队
微信号:算法与编程之美
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
该使用Python、TensorFlow和Keras来进行垃圾分类?
用Keras中的ImageDataGenerator 将数据集划分为训练集和验证集
面向小数据集构建图像分类模型
使用迁移学习和 TensorFlow 进行食品分类
使用深度学习和OpenCV的早期火灾检测系统
Keras 2发布:实现与TensorFlow的直接整合
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服