You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:35:27