微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Keras Functional API 中创建具有多个共享层的模型?

如何解决如何在 Keras Functional API 中创建具有多个共享层的模型?

我想要一个有 2 个输入的模型,几个具有共享权重的隐藏层,然后是单独的输出层。

我看过这个问题及其接受的答案:Share weights between two dense layers in keras。这正是我想要实现的,只是具有多个共享的密集层。

基本上,他们就是这样做的:
(我稍微修改了一下,让它有 2 个独立的输出层)

ip_shape1 = tf.keras.layers.Input(shape=(5,))
ip_shape2 = tf.keras.layers.Input(shape=(5,))

dense = tf.keras.layers.Dense(1,activation="sigmoid",kernel_initializer="ones")

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

op1 = tf.keras.layers.Dense(1,activation=tf.nn.sigmoid)(op1)
op2 = tf.keras.layers.Dense(1,activation=tf.nn.sigmoid)(op2)

model = tf.keras.models.Model(inputs=[ip_shape1,ip_shape2],outputs=[op1,op2])

我想做同样的事情,只是有 2 个共享的隐藏层:

ip_shape1 = tf.keras.layers.Input(shape=(5,kernel_initializer="ones",input_shape=(5,))
dense = tf.keras.layers.Dense(1,kernel_initializer="ones")(dense)

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

op1 = tf.keras.layers.Dense(1,op2])

但是当我尝试这样做时,出现错误

TypeError: Inputs to a layer should be tensors. Got: <tensorflow.python.keras.layers.core.Dense object at 0x7f7286dc7c70>

解决方法

错误出现在以下行:

dense = tf.keras.layers.Dense(1,activation="sigmoid",kernel_initializer="ones")(dense)

本质上,您使用 dense(另一个 Keras 层)调用密集层。相反,层 tf.keras.layers.Dense 需要一个张量作为输入。


我假设您想组合两个共享的密集层。这可以通过以下方式实现:

dense_1 = tf.keras.layers.Dense(1,kernel_initializer="ones",input_shape=(5,))
dense_2 = tf.keras.layers.Dense(1,kernel_initializer="ones")

op1 = dense_1(ip_shape1)
op1 = dense_2(op1)

op2 = dense_1(ip_shape2)
op2 = dense_2(op2)

注意:未经测试。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。