1、缺少源数据对建模的影响
如果缺少源数据只有对数据加工后的数据:将cifar10案例的自变量X部分都除以255.这里仅仅展示部分重要,全部代码在后面附上。
X_train1 = X_train1.astype('float32') / 255
X_test1 = X_test1.astype('float32') / 255
这是最后的拟合效果:
2、图像数据扩充
定义所需的图像变换方法
图像变换使用keras的函数ImageDataGenerator
from keras.preprocessing.image import ImageDataGenerator
img_generator = ImageDataGenerator(
rotation_range = 90,
width_shift_range = 0.2,
height_shift_range = 0.2,
zoom_range = 0.3
)
部分参数解析:
rotation_range = 0 : 整数,随机旋转的度数范围,取值为0~180的度数。
width_shift_range / height_shift_range = 0.0 : 浮点数、一维数组或整数。
图片内容在水平和竖直方向随机移动的程度,一般使用原宽度/高度0~1之间的比例。
平移图片的时候会出现超出原图范围的区域,该区域会根据fill_mode的设定来补全。
zoom_range = 0.0 : 浮点数或[lower, upper],随机缩放范围,整数为具体范围。
若为浮点数,则相当于[lower,upper] = [1-zoom_range, 1+zoom_range]。
from keras.preprocessing import image
from matplotlib import pyplot as plt
import numpy as np
from PIL import Image #PIL pakage name is Pillow
img = plt.imread(r'F:\learning_kecheng\deenlearning\NEW\pic1.jpg')
imgarr = np.array([img * 1.0]) # 将图片矩阵处理为所需的浮点格式
imgarr.shape
Image.fromarray(img)#矩阵转图片
生成新的图像数据
我们先看一个例子,这是手写体的一个样本,原本是这样:
gen = img_generator.flow(imgarr)
next(gen).shape
Image.fromarray(np.uint8(next(gen)[0]))
plt.imshow(np.uint8(next(gen)[0]))
使用ImageDataGenerator函数变换之后:
修改参数 rotation_range = 180: