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

搭建卷积神经网络时拟合出现维度不匹配ValueError,寻求解决方案

卷积神经网络model.fit()维度不匹配报错解决

问题概述

搭建卷积神经网络时,执行model.fit()触发维度不匹配错误,相关信息如下:

数据形状

  • X_train: (555, 224, 224, 3)
  • X_test: (99, 224, 224, 3)
  • y_train: (555, 4)
  • y_test: (99, 4)
  • X_val: (116, 224, 224, 3)
  • y_val: (116, 4)

代码片段

from keras.layers import Conv2D, AveragePooling2D, MaxPooling2D, Flatten, Dense, Concatenate, Input
from keras import Model

# 定义模型输入
input_ = Input(shape=(224, 224, 3))

# 第一个并行分支
in_1 = Conv2D(filters=16, kernel_size=(3, 3), activation='relu', padding='same')(input_)
conv_1 = BatchNormalization()(in_1)
conv_1 = AveragePooling2D(pool_size=(2, 2), strides=(3, 3))(conv_1)

# 第二个并行分支
in_2 = Conv2D(filters=16, kernel_size=(5, 5), activation='relu', padding='same')(input_)
conv_2 = BatchNormalization()(in_2)
conv_2 = AveragePooling2D(pool_size=(2, 2), strides=(3, 3))(conv_2)

# 第三个并行分支
in_3 = Conv2D(filters=16, kernel_size=(5, 5), activation='relu', padding='same')(input_)
conv_3 = BatchNormalization()(in_3)
conv_3 = MaxPooling2D(pool_size=(2, 2), strides=(3, 3))(conv_3)

# 第四个并行分支
in_4 = Conv2D(filters=16, kernel_size=(9, 9), activation='relu', padding='same')(input_)
conv_4 = BatchNormalization()(in_4)
conv_4 = MaxPooling2D(pool_size=(2, 2), strides=(3, 3))(conv_4)

# 拼接分支
concat = Concatenate()([conv_1, conv_2, conv_3, conv_4])
flat = Flatten()(concat)
out = Dense(units=4, activation='softmax')(flat)

# 编译模型
from tensorflow.keras.optimizers import Adam
model.compile(
  optimizer = Adam(learning_rate=0.00001),
  loss='categorical_crossentropy',
  metrics=['accuracy']
)

model1 = model.fit(X_train,
                        y_train,
                        validation_data = (X_val, y_val),
                        epochs = 100,
                        batch_size=batch_size
                        # callbacks=[es_callback]
                        )

报错信息

ValueError: 维度必须匹配,但在节点'Equal'中分别为4和224,输入形状为: [?,4], [?,224,224]

问题原因及修复方案

核心原因

代码中仅定义了模型的输入层和输出层,但未通过Model()类创建完整的模型实例,导致model变量指向的并非预期的神经网络模型(可能是之前定义的某个层对象),最终引发模型输出与标签维度不匹配的错误。

修复步骤

  1. 补全模型创建代码:在定义完输出层out后,添加以下代码创建完整模型:
model = Model(inputs=input_, outputs=out)
  1. 补充缺失的导入:代码中使用了BatchNormalization但未导入,需在开头的导入语句中添加:
from keras.layers import Conv2D, AveragePooling2D, MaxPooling2D, Flatten, Dense, Concatenate, Input, BatchNormalization
  1. 定义batch_size变量:代码中使用了batch_size但未赋值,需提前设置具体数值,例如:
batch_size = 32

修复后的完整模型定义与编译部分如下:

# 拼接分支
concat = Concatenate()([conv_1, conv_2, conv_3, conv_4])
flat = Flatten()(concat)
out = Dense(units=4, activation='softmax')(flat)

# 创建完整模型实例(关键缺失代码)
model = Model(inputs=input_, outputs=out)

# 编译模型
from tensorflow.keras.optimizers import Adam
batch_size = 32
model.compile(
  optimizer = Adam(learning_rate=0.00001),
  loss='categorical_crossentropy',
  metrics=['accuracy']
)

内容的提问来源于stack exchange,提问作者Rezuana Haque

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:30:45