如果我对您的理解正确,那么您所要求的并不容易实现(也许不是您所需要的)。
退一步,keras模型中的一个训练步骤大致是:
predictions = model(train_x)
loss = some_loss_function(true_labels, predictions)
do_backprop_etc_to_update_model_in_order_to_minimize_loss(loss_operations)
keras & tf(巧妙地)隐藏了这些步骤中第三个步骤的大部分实现(我已经过分简化了),但它仍然发生并且是 keras/tf 训练的核心。
这意味着如果你有一个来自model1 的损失,那么如果不包括来自model1 inside model2 的操作(实际上就像model3 可以做所有事情 - 包括两个输出。我想这就是你真正想要的吗?)
如果您选择单个模型而不是您描述的架构,那么您可以有 2 个不同的输出,每个输出都有自己的损失函数。此外,您的第二个损失函数可以任意复杂(因此可以包括第一个损失函数的计算)。
这样的架构或许就是一个例子:
inputs = Input(shape=(17,))
dense1 = Dense(32, activation='relu')(inputs)
dense2 = Dense(18, activation='relu')(dense1)
dense3 = Dense(7, activation='relu')(dense2)
out1 = Softmax()(dense3)
out2 = Dense(1, activation='sigmoid')(dense2)
model = Model(inputs=inputs, outputs=[out1,out2])
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_2 (InputLayer) [(None, 17)] 0
__________________________________________________________________________________________________
dense_3 (Dense) (None, 32) 576 input_2[0][0]
__________________________________________________________________________________________________
dense_4 (Dense) (None, 18) 594 dense_3[0][0]
__________________________________________________________________________________________________
dense_5 (Dense) (None, 7) 133 dense_4[0][0]
__________________________________________________________________________________________________
softmax_1 (Softmax) (None, 7) 0 dense_5[0][0]
__________________________________________________________________________________________________
dense_6 (Dense) (None, 1) 19 dense_4[0][0]
==================================================================================================
Total params: 1,322
Trainable params: 1,322
Non-trainable params: 0