使用MLP预测水体污染时y_true与y_pred输出维度不一致问题排查
错误产生原因
- 输出层定义语法错误:你编写的
model.add(Dense(2), )存在括号位置错误,model.add()方法的右括号位置偏移,导致输出维度为2的全连接层没有被正确添加到模型中,模型实际输出维度和标签的2维结构不匹配。 - 多输出评价参数未配置:你调用的
r2_score默认适配单输出任务,未指定multioutput参数时传入2维标签,也会触发维度不匹配的报错。
解决方案
- 修正模型层定义代码,调整括号位置,同时给隐藏层统一添加激活函数,显式指定输入维度避免形状推断错误:
model = Sequential() # 显式指定输入特征维度为7 model.add(Dense(10, activation='relu', input_shape=(7,))) model.add(Dense(10, activation='relu')) model.add(Dense(8, activation='relu')) # 修正输出层写法,回归任务输出层不需要额外激活函数 model.add(Dense(2))
你可以在编译完成后添加model.summary()代码,查看各层输出形状,确认最后一层输出维度为(None, 2)即可匹配你的标签结构。
- 调整R2得分的调用参数,适配多输出场景:
# 保留两个污染指标各自的R2得分 r2_y_predict = r2_score(y_test, y_predict, multioutput='raw_values') # 如果需要返回整体平均R2,可改为 multioutput='uniform_average'
内容的提问来源于stack exchange,提问作者son
相关产品推荐
相关产品推荐

