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
相关产品推荐
相关产品推荐

