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

Keras报错:Shapes (None,3)与(None,4,3)不兼容,求解决方案

解决Keras模型形状不兼容问题

问题原因

你的输入样本形状为(样本数, 4, 2),直接使用Dense层时,Dense会对每个子元素(即4个双值元素)单独执行全连接运算,导致模型最终输出形状为(None, 4, 3),而标签y的形状是(None, 3),两者维度不匹配,因此抛出ValueError。

两种可行解决方案

方案一:展平输入特征(最直接)

在模型开头添加Flatten层,将(4,2)的二维特征展平为一维的8维特征,后续Dense层的输出维度会与标签匹配。

修改后的完整代码:

import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten  # 新增Flatten导入
from keras.utils import to_categorical
import numpy as np

x=[[[13.0, 10.0], [12.0, 28.0], [10.0, 14.0], [6.0, 53.0]], 
   [[12.0, 53.0], [13.0, 53.0], [10.0, 53.0], [3.0, 31.44]], 
   [[15.0, 28.0], [16.0, 28.0], [13.0, 28.0], [6.0, 28.0]]]
y=[0, 1, 2]

x=np.array(x).reshape(-1,4,2)
y=to_categorical(np.array(y),num_classes=3)

model = Sequential()
model.add(Flatten(input_shape=(4,2)))  # 新增Flatten层
model.add(Dense(16, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(3, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

model.fit(x, y, epochs=20)

方案二:全局池化聚合特征

如果希望保留每个子元素的特征信息后再聚合,可以使用GlobalAveragePooling1D或GlobalMaxPooling1D层,将4个子元素的特征聚合为一维向量,再进行分类输出。

修改后的完整代码:

import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, GlobalAveragePooling1D  # 新增池化层导入
from keras.utils import to_categorical
import numpy as np

x=[[[13.0, 10.0], [12.0, 28.0], [10.0, 14.0], [6.0, 53.0]], 
   [[12.0, 53.0], [13.0, 53.0], [10.0, 53.0], [3.0, 31.44]], 
   [[15.0, 28.0], [16.0, 28.0], [13.0, 28.0], [6.0, 28.0]]]
y=[0, 1, 2]

x=np.array(x).reshape(-1,4,2)
y=to_categorical(np.array(y),num_classes=3)

model = Sequential()
model.add(Dense(16, activation='relu', input_shape=(4,2)))
model.add(Dropout(0.5))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.5))
model.add(GlobalAveragePooling1D())  # 新增全局平均池化层
model.add(Dense(3, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

model.fit(x, y, epochs=20)

内容的提问来源于stack exchange,提问作者cdscgff sdfgfdg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:35:28