【问题标题】:keras: train a hierarchical categorical + regression model at the same timekeras:同时训练一个分层分类+回归模型
【发布时间】:2019-08-13 17:39:52
【问题描述】:

我有以下型号:

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)

代码正在运行,但这并不是我想要的。 我希望“同时”训练 model_A 和 model_B。也就是说,model_A 使用自己的交叉熵损失函数,同时考虑了来自 model_B 的反向传播误差。这有可能吗?

【问题讨论】:

    标签: keras keras-layer


    【解决方案1】:

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

    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])
    

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 2018-03-31
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多