
我希望通过使用图中所示的共享层执行分割和分类来执行多任务学习。然而,输出1将是一个分段掩码,它使用不同的损失函数,如骰子损失,输出2使用softmax激活来提供类别概率。而且,数据是相互排斥的,分割任务来自自然图像领域,而分类任务来自医学图像领域。Keras或Pytorch是否有明确的方法或示例来演示这种多任务学习任务?
发布于 2020-06-01 20:59:29
我想你应该在训练时交替执行这两项任务。
我还将假设您将在同一批中混合这两个任务。
您可以创建一个自定义的Dataset,它返回
class MixedDataset(Dataset):
# ...
def __getitem__(self, index):
# ... get data according to index
return img, seg, seg_flag, class, class_flag对于医学图像,seg将是一个虚拟掩码,seg_flag将为0,而class将成为目标类,class_flag将为1。
另一方面,对于自然图像,seg将是所需的分割掩码,seg_flag为1,而class将是虚拟的,class_flag为0。
现在您可以运行您的训练代码:
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()https://stackoverflow.com/questions/62132445
复制相似问题