kwargs用法之省略赋值

很多开源工程经常会出现args,kwargs。本文将不定期更新博主解锁的kwargs用法

省略赋值
源工程地址
问题代码

class DC_and_CE_loss(nn.Module):
    def __init__(self, soft_dice_kwargs, ce_kwargs, aggregate="sum"):
        super(DC_and_CE_loss, self).__init__()
        self.aggregate = aggregate
        self.ce = CrossentropyND(**ce_kwargs)
        self.dc = SoftDiceLoss(apply_nonlin=softmax_helper, **soft_dice_kwargs)

    def forward(self, net_output, target):
        dc_loss = self.dc(net_output, target)
        ce_loss = self.ce(net_output, target)
        if self.aggregate == "sum":
            result = ce_loss + dc_loss
        else:
            raise NotImplementedError("nah son") # reserved for other stuff (later)
        return result

def CE_DiceLoss(self, logit, target):
    criterion = DC_and_CE_loss()
    if self.cuda:
       criterion = criterion.cuda()
    loss = criterion(logit, target)

    return loss

上面的代码会报错,原因是ce_kwargssoft_dice_kwargs需要在定义DC_and_CE_loss()时被赋值,但是点进CrossentropyNDSoftDiceLoss发现,这两个类的所有参数都有缺省值。我想让DC_and_CE_loss()所有参数都设置为缺省值。

最简单的解决方法:
criterion = DC_and_CE_loss()改为criterion = DC_and_CE_loss(ce_kwargs={}, soft_dice_kwargs={}),这里改成None也是行不通的。根本原因在于kwargs的本质是个字典,要让它为默认值,则赋值一个空字典

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值