Torch 的幾個損失函式
初步瞭解一下,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