from keras.preprocessing import image # 图像预处理工具的模块
fnames = [os.path.join(train_cats_dir, fname) for
fname in os.listdir(train_cats_dir)]
img_path = fnames[3] # 选择一张图像进行加强
img = image.load_img(img_path, target_size=(150, 150)) # 读取图像并调整大小
x = image.img_to_array(img) # 将其形状转换为(150,150,3)的Numpy数组
x = x.reshape((1,) + x.shape) # 将其形状转换为(1,150,150,3)
i = 0
for batch in datagen.flow(x, batch_size=1): # 一个生成元组(x, y)的迭代器
plt.figure(i)
imgplot = plt.imshow(image.array_to_img(batch[0])) #plt.imshow()负责对图像进行处理
i += 1
if i % 4 == 0:
break # 生成随机变换后的图像批量。循环是无限的,因此你需要在某个时刻终止循环
plt.show()
使用这种数据增强来训练一个新网络,那么网络不会两次看到相同的输入。但网络看到的输入仍是高度相关的,因为这些输入都来自少量的原始图像。无法生成新的信息,只能混合现有信息。因此,这种方法不足以完全消除过拟合。