1、nn.CrossEntropyLoss()

在pytorch中nn.CrossEntropyLoss()为交叉熵损失函数,用于解决多分类问题,也可用于解决二分类问题。在使用nn.CrossEntropyLoss()其内部会自动加上Sofrmax层


 nn.CrossEntropyLoss()的计算公式如下:

                    

其中, log以e为底,nn.CrossEntropyLoss(x, lable),有两个参数

  • 第一个参数:x为输入也是网络的最后一层的输出,其shape为[batchsize,class](函数要求第一个参数,也就是最后一层的输出为二维数据,每个向量中的值为不同种类的概率值)
  • 第二个参数:是传入的标签,也就是某个类别的索引值,在上面公式没有参与计算。batch_size如果是1,那么就只有一个数字,0,1或者2,表示的就是此时这个样本对应的真实类别,如果为batch_size是2,那么就有两个数字,例如(0,1),分别表示这两条样本对应的真实类别。

例如,输入(也就是最后一层的输出)为x=[[4,8,3]],shape=(1,3),即batchsize=1,class=3

  • 第一步 我们首先计算一下三种类别分别对应的损失
loss(x,0)
=-x[0]+log(exp(x[0])+exp(x[1])+exp(x[2]))=-4+log(exp(4)+exp(8)+exp(3))=-4+8.0247=4.0247

loss(x,1)
=-x[1]+log(exp(x[0])+exp(x[1])+exp(x[2]))=-8+log(exp(4)+exp(8)+exp(3))=-8+8.0247=0.0247

loss(x,2)
=-x[2]+log(exp(x[0])+exp(x[1])+exp(x[2]))=-3+log(exp(4)+exp(8)+exp(3))=-3+8.0247=5.0247
  • 第二步 用第二个参数(一维数据)也就是类别对应的索引值,在上面结果中选择对应的损失,例如若网络的输出为x=[[4,8,3]],而对应的标签为1,则得到损失函数loss=0.0247。

2、BCELoss

BCELoss是Binary CrossEntropyLoss的缩写,nn.BCELoss()为二元交叉熵损失函数,只能解决二分类问题。在使用nn.BCELoss()作为损失函数时,需要在该层前面加上Sigmoid函数,一般使用nn.Sigmoid()即可。

3、nn.MSELoss

ps:用与解决回归问题,常用pytorch的nn.MSELoss损失函数(均方损失函数)


————————————————
版权声明:本文为CSDN博主「东城西阙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35605081/article/details/108368276

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐