If kl_loss_bs and kl_loss_ch should be trainable parameters, you should wrap them into nn.Parameter:
class SegmentationMultiLosses(nn.CrossEntropyLoss):
    """2D Cross Entropy Loss with Multi-L1oss"""
    def __init__(self, nclass=-1, weight=None,size_average=True, ignore_index=-1):
        super(SegmentationMultiLosses, self).__init__(weight, size_average, ignore_index)
        ...
        self.kl_loss_bs = nn.Parameter(torch.tensor([0]))
        self.kl_loss_ch = nn.Parameter(torch.tensor([0]))

Alternatively, if you don’t want to train them, you could register them as buffers:
class SegmentationMultiLosses(nn.CrossEntropyLoss):
    """2D Cross Entropy Loss with Multi-L1oss"""
    def __init__(self, nclass=-1, weight=None,size_average=True, ignore_index=-1):
        super(SegmentationMultiLosses, self).__init__(weight, size_average, ignore_index)
        ...
        self.register_buffer('kl_loss_bs', 'torch.tensor([0]))
        self.register_buffer('kl_loss_ch', torch.tensor([0]))

Both approach will make sure that these tensors are also pushed to the device, if you call model.to(device) or model.cuda().
Also, the recommended way to initialize tensors given a list or value is torch.tensor (lowercase t).