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

TensorFlow Dense层中为何存在(128,)与(10,)一维权重?

为什么Keras模型中会出现(128,)和(10,)的一维权重?

这是个很常见的疑问,你看到的这两个一维数组其实是Dense层的偏置(Bias)参数,下面给你拆解清楚:

1. Dense层的默认行为

Keras的Dense层默认会为每个神经元添加一个偏置项(对应参数use_bias=True,这是默认设置)。Dense层的输出计算逻辑是:
输出 = 激活函数(输入 × 权重矩阵 + 偏置)

其中:

  • 权重矩阵就是你预期的那些二维数组:比如第一个Dense层的(784,128)是输入特征到128个神经元的连接权重;第二个Dense层的(128,10)是128个神经元到10个输出神经元的连接权重
  • 偏置是每个神经元独有的一个偏移值,128个神经元就对应128个偏置值,所以是(128,)的一维数组;10个输出神经元就对应(10,)的一维数组

2. 验证你的模型结构

看你定义的模型:

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

两个Dense层都用了默认的use_bias=True,所以每个层都会输出两组参数:权重矩阵 + 偏置数组,总共就是4组参数,和你打印的结果完全对应。

3. 如何去掉这些偏置参数

如果确实不需要偏置,可以在定义Dense层时显式设置use_bias=False,比如:

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu', use_bias=False),
    keras.layers.Dense(10, activation='softmax', use_bias=False)
])

这时候再运行model.get_weights(),就只会输出你最初预期的(784,128)和(128,10)两个权重矩阵了。

内容的提问来源于stack exchange,提问作者Kento Nishi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:25:10