Keras处理8×8灰度图数据增强报错:维度不匹配问题求助
解决Keras ImageDataGenerator.flow()的Rank 4输入错误
错误原因很明确:ImageDataGenerator.flow()要求输入是4维numpy数组,格式为(样本数量, 图像高度, 图像宽度, 通道数),而你传入的是单张8×8灰度图的2维数组(8,8),缺少样本维度(哪怕只有1个样本)和灰度图的通道维度(通道数为1)。
直接修改代码即可解决,关键是给数组补上缺失的两个维度,同时不需要转成PIL Image,直接用numpy数组传入flow()更简洁:
from keras.preprocessing.image import ImageDataGenerator import numpy as np datagen = ImageDataGenerator( rotation_range=45, # 随机旋转0-45度 width_shift_range=0.2, # 水平偏移比例 height_shift_range=0.2,# 垂直偏移比例 shear_range=0.2, # 剪切变换比例 zoom_range=0.2, # 缩放比例 horizontal_flip=True, # 水平翻转 fill_mode='nearest') # 填充模式,可选nearest/constant/reflect/wrap # 构建8*8二值数组 array = np.array([ [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,1,1,1,0,0,0], [0,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,0] ]) # 缩放为uint8格式(0-255) array = (array * 255).astype(np.uint8) # 关键修改:给数组添加样本维度和通道维度,变成(1,8,8,1)的4维数组 x = np.expand_dims(np.expand_dims(array, axis=0), axis=-1) i = 0 # 现在传入的是符合要求的4维数组 for batch in datagen.flow(x, batch_size=16, save_to_dir='augmented', save_prefix='aug', save_format='png'): i += 1 if i > 20: break # 避免生成器无限循环
关键修改说明:
np.expand_dims(array, axis=0):给数组添加第一个维度(样本数),此时数组形状变为(1,8,8)np.expand_dims(..., axis=-1):添加最后一个维度(通道数),最终形状为(1,8,8,1),完全符合flow()的输入要求- 移除了不必要的PIL Image转换,直接用numpy数组处理更高效
运行修改后的代码,就能正常生成增强后的图像到augmented目录下了。
内容的提问来源于stack exchange,提问作者BlueCurve
相关产品推荐
相关产品推荐

