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

为何添加Keras的Dense层后模型准确率从36%提升至86%?

为什么添加Dense隐藏层后模型准确率大幅提升?

哈哈,这个现象太经典了,我来给你掰扯清楚为啥加了这么一层之后效果直接起飞:

1. 原模型是个“能力有限”的线性分类器

你之前的模型应该是直接把13维的输入特征连到3分类的输出层,相当于一个多分类逻辑回归模型——这是个纯线性模型,只能学习特征和类别之间的线性关系。但红酒数据集的特征和类别之间根本不是简单的线性映射:比如酒精含量、苹果酸含量这些特征,单独看和类别没啥直接线性关联,得组合起来(比如“高酒精+低苹果酸”)才能有效区分不同红酒类别。线性模型没法捕捉这种复杂的交互模式,所以准确率才会低到36%,基本和随机猜差不多(3分类随机猜的准确率约33%)。

2. 新增的Dense层给模型加了“特征提炼”的能力

你加的model.add(Dense(6, activation='relu'))是一个带ReLU激活的全连接隐藏层,它的核心作用有两个:

  • 特征组合:6个神经元相当于让模型自动学习6种不同的高级复合特征——把原始的13个特征进行加权组合,生成更有区分度的中间特征(比如“酸度0.5 + 酒精含量0.8”这类模式);
  • 非线性映射:ReLU激活函数打破了线性限制,让模型能拟合数据里的非线性关系。没有激活函数的话,就算加了隐藏层,整个模型还是线性的(因为线性变换的叠加还是线性变换),ReLU的存在才真正让模型拥有了处理复杂数据的能力。

3. 结合红酒数据集的具体表现

红酒数据的类别区分本来就依赖多个特征的复杂交互,新增的隐藏层相当于给模型加了一步“思考”:先把原始的零散特征加工成能精准区分类别的高级特征,再用这些特征去做分类,自然就能把准确率从接近瞎蒙的水平拉到86%。

前后模型代码对比

原模型(线性分类器):

model = Sequential()
# 直接从输入层到输出层,无隐藏层
model.add(Dense(3, activation='softmax', input_shape=(13,)))

添加隐藏层后的模型(非线性模型):

model = Sequential()
# 新增的非线性隐藏层
model.add(Dense(6, activation='relu', input_shape=(13,)))
model.add(Dense(3, activation='softmax'))

内容的提问来源于stack exchange,提问作者Official Y.G.K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:46:46