具有互斥任务的多任务学习?
Posted
技术标签:
【中文标题】具有互斥任务的多任务学习?【英文标题】:Multi-task learning with mutually exclusive tasks? 【发布时间】:2020-09-19 18:24:37 【问题描述】:我希望通过使用共享层执行分割和分类来执行多任务学习,如图所示。然而,输出 1 将是一个分割掩码,它与 Dice 损失等不同的损失函数一起工作,输出 2 与 softmax 激活一起工作以提供类概率。此外,数据是互斥的,分割任务来自自然图像域,分类任务来自医学图像域。 Keras 或 Pytorch 是否有明确的方式或示例来演示此类多任务学习任务?
【问题讨论】:
【参考方案1】:我想您想在训练时交替执行这两项任务。 我还将假设您将在同一个批次中混合这两个任务。
你可以自定义一个返回的Dataset
class MixedDataset(Dataset):
# ...
def __getitem__(self, index):
# ... get data according to index
return img, seg, seg_flag, class, class_flag
对于医学图像,seg
将是一个虚拟掩码,seg_flag
将为零,而class
将成为目标类,class_flag
为 1。
另一方面,对于自然图像,seg
将是所需的分割掩码,seg_flag
为 1,而class
将是一个虚拟图像,class_flag
为零。
现在你可以运行你的训练代码了:
for i, (img, seg, seg_flag, class, class_flag) in train_loader:
opt.zero_grad()
pred_mask, pred_class = model(img) # predict both
loss_seg = seg_flag * dice_loss_fuction(pred_mask, seg)
loss_class = class_flag * cross_entropy_loss_function(pred_class, class)
(loss_seg + loss_class).backward()
opt.step()
【讨论】:
以上是关于具有互斥任务的多任务学习?的主要内容,如果未能解决你的问题,请参考以下文章
西湖大学张岳:自然语言处理中的多任务联合学习(384页PPT)