我希望通过使用共享层进行分割和分类来执行多任务学习,如图所示。然而,输出1将是一个分割掩码,它与Dice loss等不同的损失函数一起工作,输出2与softmax activations一起工作以提供类概率。另外,数据是互斥的,分割任务来自自然图像域,分类来自医学图像域。Keras或Pytorch是否有定义的方式或例子来演示这种多任务学习任务?
我想你想在训练时交替执行这两个任务。我也会假设你要在同一批次内混合使用这两个任务。
你可以制作一个自定义的 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
另一方面,对于自然图像来说。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()