nn.BCELoss和nn.CrossEntropyloss 总结

nn.BCELoss和nn.CrossEntropyloss总结

参考博文如下

在参考了这些博文后,终于对损失函数有了一些了解 现在总结起来 方便以后复习
链接1: softmax
链接:2
链接:3
链接:4

如有侵权 立马删除

nn.BCEloss

公式如下:
1. **全新的界面设计** ,将会带来全新的写作体验;
1.输入的X 代表模型的最后输出 y 代表你的label 我们的目的就是为了让模型去更好的学习label 所以loss 越小的话 x越接近label 我们的学习效果也越好
2. 使用这个公式前 x需要先通过sigmoid 激活函数 归一化到0-1之间
3. 一般二分类都是用的nn.BCELoss 因为二分类只有0 1 之分 正样本是1 负样本是0 看这个公式 当是正样本的时候 公式为 -w(ylogx) 不看w 的话 Loss的值域应该是 0到正无穷 所以loss最小是0 也就是x为1的时候 所以 x越大loss越小 也就是x越接近正样本1 loss越小 这就是这个公式的意义 反之一样
4. 使用BCELoss input和target shape 是一样的 nn.CrossEntropyloss和这个不同

nn.CrossEntropyloss

公式如:
在这里插入图片描述
logsoftmax 公式:
在这里插入图片描述
nll loss 公式:
在这里插入图片描述

这个公式简单来说就是 logsoftmax+ nllloss的结合体,不明白的先看我参考的那几篇博文

  1. log里面实际上就是softmax 公式 所以输入不需要像BECLoss 一样先经过激活函数 这里面自带激活函数
  2. 加上log 就是 logsoftmax 了
  3. 再取负数 就是nllloss的概念了 这里nllloss里面有参数 mean 和 sum 实际上就是对应的nn.CrossEntropyloss 里面的reduction参数 mean代表取均值 sum代表取总和
  4. input和target 的shape 不一样 input 是N*C C代表种类个数 target 是N
    这里的原因就是上面的nllloss的缘故 他的作用是把对应标签位置的值拿出来取负数

举个例子

比如输入是3*3 代表 3张图片预测3类 每一张图片都预测他属于每一类的概率
因为经过了softmax所以概率和为1 我们假设是
[[0.2,0.3,0.5],
[0.8,0.1,0.1],
[0.7,0.2,0.1] 可以看出来 每一行的和为1 行代表图片个数 列代表种类 而我们的标签 是3 和输入不对应
比如是[0,1,2] 这时候 会自动one-hot编码 比如0 会变成[1,0,0]他会吧每一行对应的标签的数拿出来 第一个0 应该是第0类 所以吧0.8拿出来 第二个是1 吧0.1拿出来 以此类推。 这样就拿出来了3个数 根据reduction的设置 取平均或者总和 代表了最后的损失 可以看出 只有loss越小 说明标签是对应的 学习的越好。

总结

总结一下nn.CrossEntropyloss
看整个公式 实际就是交叉熵公式 在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: nn.BCELoss()和nn.CrossEntropyLoss()是PyTorch库中常用的损失函数。 nn.BCELoss()是二分类问题中使用的二元交叉熵损失函数。这个函数适用于输出数据为概率值的情况,如sigmoid函数输出的概率值。它计算每个样本的损失然后对它们取平均值。BCE代表二元交叉熵(binary cross entropy)。这个损失函数可以反映模型预测结果与真实标签之间的差距,并帮助模型通过梯度下降来更新网络参数,使得预测结果与真实标签尽可能接近。 nn.CrossEntropyLoss()是多分类问题中使用的交叉熵损失函数。这个函数适用于输出数据为类别索引的情况,如使用softmax函数进行多分类任务的结果。它将模型预测的概率分布与真实标签之间的差异转化为一个标量损失值。CrossEntropy代表交叉熵损失,它将每个样本的预测概率与真实标签对应位置的真实概率进行比较,并对它们进行求和然后取平均。这个损失函数可以帮助模型学习到正确的类别预测,使得预测的概率分布与真实标签的概率分布尽可能接近。 综上所述,nn.BCELoss()适用于二分类问题,计算模型输出概率值与真实标签之间的差异;而nn.CrossEntropyLoss()适用于多分类问题,计算模型输出概率分布与真实标签之间的差异。 ### 回答2: nn.BCELoss()和nn.CrossEntropyLoss()都是PyTorch中用于计算损失函数的类。 nn.BCELoss()是二分类问题中使用的损失函数,用于计算二分类交叉熵损失。它将模型的输出与目标标签进行比较,并计算每个样本的二进制交叉熵损失。如果目标标签是正类,则损失函数会惩罚模型输出为负类的程度,反之亦然。nn.BCELoss()常用于二分类任务中,例如图像分类中的两类分割、异常检测等。 nn.CrossEntropyLoss()则用于多分类问题中,计算多分类交叉熵损失。它接受模型的输出和目标标签,并计算每个样本的交叉熵损失。在多分类问题中,目标标签需用One-Hot编码或整数类型表示。nn.CrossEntropyLoss()会将模型输出进行softmax处理,再与目标标签进行比较,计算交叉熵损失。它对于多分类问题是常用的损失函数。 总结: 1. nn.BCELoss()适用于二分类问题,计算二分类交叉熵损失。 2. nn.CrossEntropyLoss()适用于多分类问题,计算多分类交叉熵损失。 两者主要区别在于输入形式和模型输出的处理方式。 ### 回答3: nn.BCELoss()和nn.CrossEntropyLoss()都是PyTorch框架中常用的损失函数。它们的差异在于应用的场景和处理方式不同。 nn.BCELoss()是二分类问题的损失函数,适用于输出为概率值的情况。它的全称是Binary Cross Entropy Loss,用于衡量模型输出的概率与真实标签之间的差异。该损失函数采用式子:Loss = -[y*log(x) + (1-y)*log(1-x)],其中y是真实标签,x是模型输出的概率。nn.BCELoss()常用于输出值为0或1的二分类任务,比如判断图像中是否包含某个物体。 nn.CrossEntropyLoss()是多分类问题的损失函数,适用于输出为类别的情况。它的全称是Cross Entropy Loss,用于衡量模型输出的类别预测值与真实标签之间的差异。该损失函数采用式子:Loss = -[y*log(x)],其中y是真实标签的类别索引,x是模型输出的类别概率分布。nn.CrossEntropyLoss()将分类问题转化为一个概率分布的差异度量,常用于多分类任务,比如图像分类、文本分类等。 两者之间的区别主要在于输入形式和问题类型不同。nn.BCELoss()适用于二分类问题,输出为概率值;nn.CrossEntropyLoss()适用于多分类问题,输出为类别。同时需要注意的是,对于二分类问题,可以使用nn.CrossEntropyLoss()代替nn.BCELoss(),只是需要设置输出类别为2。而对于多分类问题,如果输出为概率值,则可以使用nn.BCELoss(),但需要将输出进行二值化处理。 综上所述,nn.BCELoss()和nn.CrossEntropyLoss()是PyTorch框架中常用的损失函数,用于不同类型的分类问题。根据具体的问题和输出类型,选择合适的损失函数可以提高模型训练的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值