python损失函数实现,pytorch softmax损失函数
这也是最近做的一个模型中的损失函数,我们来了解一下这个函数。首先,它是一个二元损失函数。它可以是单标签损失函数,也可以是多标签损失函数。
1、单标签
这个图像是猫吗:1代表是,0代表不是,这就是单标签双重分类的问题。
2、多标签
和单标签一样,但是这个是多标签,所以它的标签是[1,1]。第一列代表有没有狗,第二列代表有没有猫。所以也叫二元交叉熵。
3、BCELoos损失函数class torch . nn . BCE loss(Weight:optional[torch . tensor]=none,size_average=none,reduce=none,reduction: str= mean) Weight:可以初始化一个权重矩阵size_average:默认值为True,表示计算损失。例如,对于多标签图像,由三个标签计算的损失的默认值是平均减少:默认值是总和。对于batch_size损失,求平均损失(预测的标签必须先为sigmod,然后在损失中求和),0=target[i]=1 m=nn。乙状结肠()
损失=nn。贝塞洛斯()
输出=损失(m(输入),目标)
假设我们有一个3*3的输入,即batch_size为3,有3个标签。那么我们的目标也是3*3。现在用这个例子做个示范:
将torchimport torch.nn作为nnm=nn导入。Sigmoid()损耗=nn。BCELoss()input=torch.randn((3,3),requires _ grad=True)target=torch . empty(3,3)。random_(2)output=loss(m(input),target)input:tensor([-0.5288,0.3353,1.6142],[-0.7940,1.5699,-0.1642],[ 0.1262,-0.6596,-1.4198],requires _ grad=True)sigmod:tensor([[0.3708,0.5830,0.8340],), 0. 0.], [0. 1. 1.], [1. 1. 0.]])输出:张量(0.7698,grad _ fn=binarycrosentropybackward)
总结:我们可以看出来,把输入的数据先进行sigmod,然后再计算loss。还有一个损失函数BCEWithLogitsLoss()。它将sigmod集成到一块了。因此如果不想用sigmod直接用这个处理就可以了。而且使用这个损失函数还不会造成梯度消失问题。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。