初步了解一下,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