Torch 的几个损失函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16305985/article/details/79101039

初步了解一下,pytorch里面的损失函数及使用方法。如有不对的地方,欢迎指出。谢谢!

1.  L1Loss

Input:    X、Y可以是任意形状的输入,X与Y的 shape相同。

Output: 标量

用途:计算X与Y的差的绝对值, 1/n * (|Xi -Yi|)

2. MSELoss

Input:  x, y 任意具有相同shape的tensor。

Output: 计算均方差

3. CrossEntropyLoss

Input: X--> (N, C), N是样本个数, C是类别个数; Y --> (N),Y表示target, Y的元素在 [0, C-1)中,即类别的索引

Output: 标量,适用于多分类模型

4.NLLLoss

用于多分类模型

input:  X --> (batch_size, num_classes), Y --> (batch_size)1D list (属于某一类的index)

output: (batch_size)

当 输入类似图片这种格式时,即 X --> (batch_size, num_classes, d1, d2, ..., dk)

Y --> (batch_size, d1, d2, ..., dk)

输出为 (batch_size, d1, d2, ..., dk)。计算的是每一个像素的损失。

使用方法如下: loss = torch.nn.NLLLoss(); output = loss(X, Y)

5. PoissonNLLLoss

适合多目标分类

input :  X --> (batch_size, num_classes), Y --> (batch_size, num_classes)

6. KLDivLoss

适用于连续分布的距离计算

input: X -->(N, *), Y -->(N, *)

7. BCELoss

适用于多目标分类

Input: X --> (N, *), Y --> (N, *), X 需要经过sigmoid, Y元素的值只能是0或1的float值

8. BCEWithLogitsLoss

同上,X不需要经过sigmoide

9. MarginRankingLoss

适用于计算两个1D的tensor和一个1D标签的损失,如果label为1则x1应该比x2大,若为-1则相反

输入,X1 -->(batch_size), X2 --> (batch_size), Y -->(batch_size),值为1或-1

10. HingeEmbeddingLoss

适用于学习非线性embedding、半监督学习。用于计算两个输入是否相似

input: X-->(N, *), Y --> (N, *) Y中的元素只能为1或-1

output: 依据size_average值得来


11. MultiLabelMarginLoss

适用于多目标分类

input : x --> (N, c), y --> (N, c)其中y是 LongTensor, 且其元素为类别的index


12. torch.nn.SmoothL1Loss

损失函数


Input: x --> (N, *),  y --> (N, *)

13. SoftMarginLoss

适用于二分类logistic损失

input : x --> (n, c), y --> (n, c)其中y的元素为1或-1

14. MultiLabelSoftMarginLoss

与MultiLableMarginLoss相同,区别在于y的类型是FloatTensor.

参考文档里面给出,y的元素应该是0或1,但是尝试过Index,没有报错. 


15. CosineEmbeddingLoss

与HingeEmbeddingLoss类似。计算映射空间下表示的距离。


输入包括三个值,如上图所示。

16. MultiMarginLoss

适用于多分类模型。

输入: X -->(batch_size, num_classes), Y --> (batch_size)

17. TripletMarginLoss

三胞胎网络的损失函数。



参考资料:

http://pytorch.org/docs/master/nn.html#tripletmarginloss




没有更多推荐了,返回首页