Keras调用ImageDataGenerator.flow报错:Unsupported channel number:150
解决ValueError: Unsupported channel number: 150问题
问题根源
你的输入数据维度不符合ImageDataGenerator的要求:
cv2.imread(file, 0)读取的是单通道灰度图,形状为(150,150),但你没有添加通道维度。- 当前
X.shape是(1,30,150,150),被ImageDataGenerator误判为:1个样本,30行,150列,150个通道——显然不符合图像的通道规则(灰度图是1通道,彩色是3通道)。
具体修复步骤
1. 修正数据加载代码,添加通道维度
修改图像读取后的处理,为每个灰度图补充通道维度:
import numpy as np x_dataset=[] for file in glob.glob(img): a=cv2.imread(file, 0) a=cv2.resize(a, (150, 150)) a=a/255. # 为单通道灰度图添加通道维度,形状变为(150,150,1) a = np.expand_dims(a, axis=-1) x_dataset.append(a) # 转换为numpy数组,此时X的形状应为(30,150,150,1) X = np.array(x_dataset)
2. 修正现有X的维度(如果不想重新加载数据)
如果你已经加载了数据,直接调整维度:
# 把(1,30,150,150)转成(30,150,150,1) X = np.squeeze(X, axis=0) # 去掉第一个维度,变成(30,150,150) X = np.expand_dims(X, axis=-1) # 添加通道维度,变成(30,150,150,1)
3. 验证维度是否正确
运行print(X.shape),输出应为(30, 150, 150, 1),表示30个样本,每个是150x150的单通道灰度图。
4. 重新运行图像增强代码
此时datagen.flow就能正确识别通道数,不会再报错。
额外说明
ImageDataGenerator默认使用channels_last格式(即样本数在前,通道数在最后),确保你的输入形状符合这个规则。- 保存图像时,
save_format='png'支持单通道灰度图,无需额外处理。
内容的提问来源于stack exchange,提问作者Ganesha prasad
相关产品推荐
相关产品推荐

