在Keras中两个密集层之间共享权重

13

我有以下代码。我想做的是在两个全连接层中共享相同的权重。

op1和op2层的方程如下:

op1 = w1y1 + w2y2 + w3y3 + w4y4 + w5y5 + b1

op2 = w1z1 + w2z2 + w3z3 + w4z4 + w5z5 + b1

这里w1到w5的权重在op1和op2层的输入(分别为(y1到y5)和(z1到z5))之间共享。




ip_shape1 = Input(shape=(5,))
ip_shape2 = Input(shape=(5,))

op1 = Dense(1, activation = "sigmoid", kernel_initializer = "ones")(ip_shape1)
op2 = Dense(1, activation = "sigmoid", kernel_initializer = "ones")(ip_shape2)

merge_layer = concatenate([op1, op2])
predictions = Dense(1, activation='sigmoid')(merge_layer)

model = Model(inputs=[ip_shape1, ip_shape2], outputs=predictions)

提前感谢。


你的意思是偏差必须是分开的吗? - Daniel Möller
1
@DanielMöller 我认为如果我要共享权重,那么偏差也将是相同的。问题已更新。 - Mahek Shah
1个回答

15

这个模型同时使用了同一层来处理两边的数据。(权重和偏差是共用的)

ip_shape1 = Input(shape=(5,))
ip_shape2 = Input(shape=(5,))

dense = Dense(1, activation = "sigmoid", kernel_initializer = "ones")

op1 = dense(ip_shape1)
op2 = dense(ip_shape2)

merge_layer = Concatenate()([op1, op2])
predictions = Dense(1, activation='sigmoid')(merge_layer)

model = Model(inputs=[ip_shape1, ip_shape2], outputs=predictions)

6
这里也有描述:https://keras.io/zh/getting-started/functional-api-guide/#shared-layers - Ufos
1
如果您想要在一个网络中使权重可训练,而在另一个网络中不可训练,但是您希望第二个网络在第一个网络训练时进行更新,该怎么办? - hosford42
3
在第二个位置末尾添加一个 Lambda(lambda x: K.stop_gradient(x)) - Daniel Möller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接