Conv2D层期望最小维度为4实际为3,CNN构建报错如何解决?
报错根因
Conv2D卷积层要求输入的张量最少为4维,格式为(批量大小, 高度, 宽度, 通道数),你的代码存在两个问题:
- 第一层Conv2D的
input_shape仅设置了(180,180),缺少通道数维度,导致模型预期输入为3维张量(None, 180, 180),和你实际传入的带3通道的4维图像张量不匹配 - 除了模型第一层之外,其余Conv2D层不需要额外设置
input_shape参数,重复设置错误的input_shape也会引发形状校验失败
修复方案
按以下规则修改代码即可:
- 把第一层Conv2D的
input_shape调整为(180, 180, 3),对应你图像的高度、宽度、RGB三通道数 - 移除后续所有Conv2D层的
input_shape参数,后续层会自动根据上一层输出推导输入尺寸
修复后的完整代码如下:
model.add(Conv2D(8,3,activation='relu',padding='same',input_shape=(180,180,3))) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(16,3,activation='relu',padding='same')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(32,3,activation='relu',padding='same')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(64,3,activation='relu',padding='same')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(128,3,activation='relu',padding='same')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(254, activation='relu')) model.add(Dense(9, activation='softmax'))
修改后你形状为(32, 180, 180, 3)的图像批次即可正常传入模型训练。
内容的提问来源于stack exchange,提问作者akhil kv
相关产品推荐
相关产品推荐

