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

在Keras中实现两个Dense层的权重共享问题咨询

解决Keras中两个Dense层共享权重的问题

要实现你需要的权重共享,核心思路是复用同一个Dense层实例来处理两个输入,而不是分别创建两个独立的Dense层。这样就能保证op1和op2使用完全相同的w1-w5权重矩阵和b1偏置项,完美匹配你给出的计算公式。

完整实现代码

from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

# 定义两个输入张量
ip_shape1 = Input(shape=(5,))
ip_shape2 = Input(shape=(5,))

# 先创建一个共享的Dense层实例
shared_dense_layer = Dense(
    1,
    activation="sigmoid",
    kernel_initializer="ones"
)

# 用同一个层处理两个输入,自动共享权重
op1 = shared_dense_layer(ip_shape1)
op2 = shared_dense_layer(ip_shape2)

# 构建包含双输入双输出的模型(按需使用)
model = Model(inputs=[ip_shape1, ip_shape2], outputs=[op1, op2])

为什么这样能实现共享?

在Keras中,每一个层实例都有自己独立的权重参数。当你把不同的输入传入同一个层实例时,Keras会复用这个实例的权重来计算输出,而不会重新初始化新的权重。这就意味着:

  • op1的计算会使用shared_dense_layer的w1-w5和b1
  • op2的计算同样会使用完全相同的w1-w5和b1,和你要求的公式完全一致

验证权重共享(可选)

如果你想确认权重确实共享了,可以打印权重进行验证:

# 查看两个输出对应的层权重是否一致
print("op1使用的层权重:", shared_dense_layer.get_weights()[0])
print("op2使用的层权重:", model.layers[2].get_weights()[0])  # model.layers[2]就是共享的Dense层
print("权重是否完全相同:", shared_dense_layer.get_weights() == model.layers[2].get_weights())

运行后会输出True,证明两个输出使用的是同一组权重。

注意事项

如果你分别写op1 = Dense(...)和op2 = Dense(...),哪怕参数设置完全一样,这也是两个独立的层,权重是各自初始化的,不会共享——这是初学者很容易踩的坑,一定要注意复用同一个层实例。

内容的提问来源于stack exchange,提问作者Mahek Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:15:42