Hello, I am currently working on semantic segmentation.
Originally, i used only cross entropy loss, so i made mask shape as [batch_size, height, width].
But as i try to adapt dice loss too, i use this code to make mask shape as [batch_size, class_number(=3), height, width]
def target_shape_transform(target):

    tr_tar = target.cpu().numpy()
    tr_tar = (np.arange(3) == tr_tar[...,None])
    tr_tar = np.transpose(tr_tar,(0,3,1,2))
    
    return torch.from_numpy(tr_tar).cuda()

def calc_loss(pred, target, metrics, ce_weight=0.2):
    ce = nn.CrossEntropyLoss()
    ce_loss = ce(pred,target.long())
    target = target_shape_transform(target)
    dice = dice_loss(pred, target)
    loss = ce_loss * ce_weight + (1.0 - dice) * (1.0 - ce_weight)
    return loss

It worked anyway, but i cannot find any other reference how to use ce+dice loss.
Can anybody tell me if this approach is right?