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

Python 如何在Keras Functional API中创建具有多个共享层的模型?,python,tensorflow,keras,deep-learning,functional-api,Python,Tensorflow,Keras,Deep Learning,Functional Api,我想有一个模型,有两个输入,几个隐藏层共享权重,然后是单独的输出层 我看到了这个问题及其公认的答案:。这正是我想要实现的,只要有多个共享的密集层 基本上,他们就是这样做的: (我对其进行了一些修改,使其具有两个独立的输出层) 我也希望这样做,只需使用两个共享隐藏层: ip_shape1 = tf.keras.layers.Input(shape=(5,)) ip_shape2 = tf.keras.layers.Input(shape=(5,)) dense = tf.keras.layers

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

我看到了这个问题及其公认的答案:。这正是我想要实现的,只要有多个共享的密集层

基本上,他们就是这样做的:
(我对其进行了一些修改,使其具有两个独立的输出层)

我也希望这样做,只需使用两个共享隐藏层:

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", input_shape=(5,))
dense = tf.keras.layers.Dense(1, activation="sigmoid", kernel_initializer="ones")(dense)

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])
但当我尝试这样做时,我得到了一个错误:

TypeError: Inputs to a layer should be tensors. Got: <tensorflow.python.keras.layers.core.Dense object at 0x7f7286dc7c70>
TypeError:层的输入应该是张量。得到了:

错误出现在以下行中:

dense = tf.keras.layers.Dense(1, activation="sigmoid", kernel_initializer="ones")(dense)
本质上,您正在使用
稠密
(另一个Keras层)调用稠密层。相反,层
tf.keras.layers.density
需要一个张量作为输入


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

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

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

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

注意:未测试。

谢谢,我测试过了,它可以工作。从模型摘要判断,这就是我想要实现的目标。
dense_1 = tf.keras.layers.Dense(1, activation="sigmoid", kernel_initializer="ones", input_shape=(5,))
dense_2 = tf.keras.layers.Dense(1, activation="sigmoid", kernel_initializer="ones")

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

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