1. 程式人生 > >Torch 的幾個損失函式

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