Answers:
我想出了问题的答案,这是基于以上答案的代码。
from keras.layers import Input, Dense
from keras.models import Model
from keras.utils import plot_model
A1 = Input(shape=(30,),name='A1')
A2 = Dense(8, activation='relu',name='A2')(A1)
A3 = Dense(30, activation='relu',name='A3')(A2)
B2 = Dense(40, activation='relu',name='B2')(A2)
B3 = Dense(30, activation='relu',name='B3')(B2)
merged = Model(inputs=[A1],outputs=[A3,B3])
plot_model(merged,to_file='demo.png',show_shapes=True)
这是我想要的输出结构:
在Keras中,有一种定义模型的有用方法:使用功能性API。使用功能性API,您可以定义有向无环层图,从而可以构建完全任意的体系结构。考虑您的示例:
#A_data = np.zeros((1,30))
#A_labels = np.zeros((1,30))
#B_labels =np.zeros((1,30))
A1 = layers.Input(shape=(30,), name='A_input')
A2 = layers.Dense(8, activation='???')(A1)
A3 = layers.Dense(30, activation='???', name='A_output')(A2)
B2 = layers.Dense(40, activation='???')(A2)
B3 = layers.Dense(30, activation='???', name='B_output')(B2)
## define A
A = models.Model(inputs=A1, outputs=A3)
## define B
B = models.Model(inputs=A1, outputs=B3)
B.compile(optimizer='??',
loss={'B_output': '??'}
)
B.fit({'A_input': A_data},
{'B_output': B_labels},
epochs=??, batch_size=??)
就是这样了!您可以通过以下方式查看结果B.summary()
:
Layer (type) Output Shape Param
A_input (InputLayer) (None, 30) 0
_________________________________________________________________
dense_8 (Dense) (None, 8) 248
______________________________________________________________
dense_9 (Dense) (None, 40) 360
_________________________________________________________________
B_output (Dense) (None, 30) 1230
Model
必须是InputLayer
对象。收到的输入:张量。另外,如前所述,我确实使用功能API分别创建了模型A和模型B。我认为我正在寻找的答案可能与使用连接功能的keras文档中的“多输入和多输出模型”部分有关(虽然不是很确定)。