多标签分类的多任务学习架构

数据挖掘 喀拉斯 多任务学习
2022-02-14 22:48:35

我正在处理分类问题。该数据集是按数字从 Painters 收集的,该竞赛由 kaggle 主办。任务是识别给定绘画的画家、风格和流派。

到目前为止,我训练了单个模型来预测给定绘画的画家、风格和流派。现在我想结合多任务学习(即)开发一个可以预测所有三个任务的模型。

我目前面临的问题是设计架构。

      Model                         No of classes (Softmax)
   (Individual Models)                   
   --------------------             -----------------------
 Model predicts painter                     8 (8 - painters)
 given paintings 

 Model predicts style                       10 (10 style classes)
 given paintings      


 Model predicts genre                       23 (23 genre classes)
 given paintings    

我不知道如何在 keras 中结合上述模型。任何建议或反馈都会有所帮助。

1个回答

您应该设计一个多任务模型 (MTM)。MTM 能够在多个任务之间共享来自输入的学习表示。更准确地说,我们尝试同时优化具有m各种损失函数类型的模型,每个任务一个。因此,MTM 将在其早期层学习更多通用特征,这些特征应该用于多个任务。然后,随后的层,逐渐变得更加具体到所需任务的细节,可以分为多个分支,每个分支用于特定任务。

您需要如下架构:

# Your input and hidden layers
inp = Input(...)     
x = Layer1(...)(inp)
x = Layer2(...)(x)
...
x = Layer_N-1(...)(x) 

# Your 'm' output layers
out_1 = Layer_N(x) 
out_2 = Layer_N(x)
...
out_m = Layer_N(x)

# your model
MTM = Model(inputs=inp, outputs=[out_1,out_2,...,out_m])
MTM.compile(loss=[loss_func_1, loss_func_2,..., loss_func_m], 
      optimizer='xxx', 
      metrics=xxx)

MTM.fit(train_data, [train_labels_1,train_labels_2,...,train_labels_m],                
          batch_size = xxx,
          epochs = xxx)

如果你想要一个 Keras 中的真实示例,我在这里为我的项目实现了一个 2-task ConvNet