keras:同时训练层次分类+回归模型

keras:同时训练层次分类+回归模型,keras,keras-layer,Keras,Keras Layer,我有以下型号: import keras from keras.layers import Input, Dense from keras.models import Model # Joint input layer for both model A and B inputs = Input(shape=(12,)) # --------------------------------------- # model_A x = Dense(64, activation='relu')(in

我有以下型号:

import keras
from keras.layers import Input, Dense
from keras.models import Model

# Joint input layer for both model A and B
inputs = Input(shape=(12,))

# ---------------------------------------
# model_A
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions_A = Dense(3, activation='softmax')(x)
model_A = Model(inputs=inputs, outputs=predictions_A)

# ---------------------------------------
# model_B
inputs_B = keras.layers.concatenate([inputs, predictions_A])
x1 = Dense(64, activation='relu')(inputs_B)
x1 = Dense(64, activation='relu')(x1)
predictions_B = Dense(1, activation='sigmoid')(x1)
model_B = Model(inputs=inputs, outputs=predictions_B)
两种模型的损失函数为:

model_A.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])


model_B.compile(loss='mean_squared_error', optimizer='adam')
我能够分别训练两个模型,如下所示:

model_A.fit(my_data_x, pd.get_dummies(my_data['target_categorical'],prefix=['cate_'])) 

model_B.fit(my_data_x, my_data_y)
代码正在运行,但这并不是我想要的。
我希望A型和B型同时接受培训。也就是说,模型A使用其自身的交叉熵损失函数,同时考虑到模型B的后支撑误差。这可能吗?

您需要一个具有两个输出的单一模型:

model = Model(inputs=inputs, outputs = [predictions_A, predictions_B])
model.compile(optimizer='rmsprop', 
              loss=['categorical_crossentropy', 'mse'],
              metrics=['accuracy'])
model.fit(my_data_x, 
          [pd.get_dummies(my_data['target_categorical'],prefix=['cate_']),
           my_data_y])