CNN架构实现报错:输出形状不兼容问题排查
CNN输出形状不匹配问题排查
问题背景
数据集形状如下:
x_train.shape, y_train.shape, x_test.shape, y_test.shape
输出结果:
((1203, 162, 1), (1203, 7), (402, 162, 1), (402, 7))
模型架构代码:
input_x = tf.keras.layers.Input(shape = (x_train.shape[1],1)) conv_1 = tf.keras.layers.Conv1D(filters=16,kernel_size=3,padding="same",activation="relu")(input_x) pool_1 = tf.keras.layers.MaxPooling1D(2)(conv_1) conv_2 = tf.keras.layers.Conv1D(filters=32,kernel_size=3,padding="same",activation="relu")(pool_1) pool_2 = tf.keras.layers.MaxPooling1D(2)(conv_2) flatten = tf.keras.layers.Flatten()(pool_2) dense = tf.keras.layers.Dense(512, activation="relu")(flatten) fb = tf.keras.layers.Dropout(0.4)(dense) fb = tf.keras.layers.Dense(512, activation="relu")(fb) fb = tf.keras.layers.Dropout(0.4)(fb) output = tf.keras.layers.Dense(8, activation="softmax")(fb) model_branching_summed = tf.keras.models.Model(inputs=input_x, outputs=output) model_branching_summed.summary() model_branching_summed.compile(optimizer=SGD(learning_rate=0.01 , momentum=0.8), loss='categorical_crossentropy', metrics= ['accuracy']) history=model_branching_summed.fit(x_train, y_train, batch_size=128, epochs=100, validation_data=(x_test, y_test), callbacks=[rlrp])
运行时出现错误:
ValueError Traceback (most recent call last) Cell In[192], line 5 1 rlrp = ReduceLROnPlateau(monitor='loss', factor=0.4, verbose=0, patience=2,min_lr=0.0001) 2 #(min_lr=0.000001) ----> 5 history=model_branching_summed.fit(x_train, y_train, batch_size=128, epochs=100, validation_data=(x_test, y_test), callbacks=[rlrp]) ValueError: Shapes (None, 7) and (None, 8) are incompatible
错误原因
错误核心是输出层维度与标签维度不匹配:
- 标签
y_train和y_test的形状为(样本数,7),说明这是一个7分类任务 - 但模型最后一层
Dense(8, activation="softmax")设置了8个输出神经元,导致输出形状为(None,8),和标签的(None,7)无法对应,触发形状不兼容的错误
解决方案
将输出层的神经元数量修改为7,与分类类别数一致:
# 原代码 # output = tf.keras.layers.Dense(8, activation="softmax")(fb) # 修改后 output = tf.keras.layers.Dense(7, activation="softmax")(fb)
重新编译并训练模型,即可解决该形状不匹配问题。
内容的提问来源于stack exchange,提问作者Dioneycs
相关产品推荐
相关产品推荐

