randn函数加噪声_语义分割中常用的损失函数1(基础篇)
一、L1、L2 loss (分割中不常用,主要用于回歸問題)
L1 Loss 主要用來計算 input x 和 target y 的逐元素間差值的平均絕對值.
pytorch表示為:
- torch.nn.functional.l1_loss(input, target, size_average=True)
 
size_average主要是考慮到minibatch的情況下,需要求平均。
loss = nn.L1Loss() input = torch.randn(3, 5, requires_grad=True) target = torch.randn(3, 5) output = loss(input, target) #是一個標量 output.backward() # 求這個標量loss對每個input元素的梯度 可以用input.grad顯示出來L2 損失(MSE loss)L2 LossL2 loss
L2 Loss 主要用來計算 input x 和 target y 的逐元素間差值平方的平均值.
pytorch中表示為:
- torch.nn.functional.mse_loss(input, target, size_average=True)
 
具體應(yīng)用不再介紹。
二、交叉熵損失
首先介紹一下交叉熵損失函數(shù)的由來,其中將介紹為什么交叉熵可以用于分類或分割,以及在one-hot多類別分類以及0-1編碼二分類之間的區(qū)別;
1、從KL散度到交叉熵損失
如果我們對于同一個隨機變量 x 有兩個單獨的概率分布 P(x) 和 Q(x),我們可以使用 KL 散度(Kullback-Leibler (KL) divergence)來衡量這兩個分布的差異:
變形可以得到:
等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:
在一般的機器學(xué)習任務(wù)中,我們需要評估label和predicts之間的差距;上式中:P(x)代表label、q(x)代表predicts;由于label本身的熵是不變的,因此我們只需要關(guān)注后面的交叉熵就可以了。所以一般機器學(xué)習任務(wù)中直接使用交叉熵作為loss,用于評估模型。
2. 多分類任務(wù)中的one-hot編碼下的交叉熵(當然one-hot也可以用于二分類)
首先介紹softmax操作,如圖:
softmax的輸出是一種歸一化的分類概率,它將輸出z首先經(jīng)過指數(shù)級別進行差別放大,之后歸一化到0到1之間。可以讓大的數(shù)變得更大,小的數(shù)變得更小,最終所有的值歸一化到0、1之間。
在數(shù)學(xué)上:
直觀上看:
如何知道softmax的輸出和真實label之間的差距呢?(計算交叉熵損失)
計算出來的y和y hat都是兩個vector,和都是1,并且都相同的維度,可以理解為兩個離散的概率分布。這樣就可以衡量softmax輸出的概率分布和label的one-hot分布之間的差距。使用交叉熵。
one-hot下的交叉熵表示為(上面z符號用x表示了哈):
因為除了label位置對應(yīng)的y hat為1,其余均是0;最終只剩一項
,而y label的值就是換個角度:對于這個loss,我們希望的是x label越來越大,其他x項越來越小;loss得到之后,更新都是原有的值減去lr*梯度;需要類別x label對應(yīng)的梯度是負值,其他對應(yīng)的梯度為正值。從loss可以很容易看出來哈!!!
pytorch中與Cross Entropy相關(guān)的loss Function(one-hot形式):
- CrossEntropyLoss: combines LogSoftMax and NLLLoss in one single class,也就是說我們的網(wǎng)絡(luò)不需要在最后一層加任何輸出層,該loss Function為我們打包好了;
 - NLLLoss: 也就是negative log likelihood loss,如果需要得到log分布,則需要在網(wǎng)絡(luò)的最后一層加上LogSoftmax
 - NLLLoss2d: 二維的negative log likelihood loss,多用于分割問題(目前已經(jīng)整合到NLLLoss)
 
3. 二分類0-1編碼:output的編碼不是one-hot,只是0代表1類,1代表一類;
真實的分布就是0和1;
預(yù)測的分布就是:如果是1的話就是f(x),0的話自然就是1-f(x);
我們希望這個loss損失達到最大值;
將上式進行歸納:
本質(zhì)上就是交叉熵在伯努利分布上的表現(xiàn)形式,即:
二分類用的交叉熵,用的時候需要在該層前面加上 Sigmoid 函數(shù)。將輸出值變到0到1之間;
總結(jié)
以上是生活随笔為你收集整理的randn函数加噪声_语义分割中常用的损失函数1(基础篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: numpy 随机数_TF+Numpy减少
 - 下一篇: mysql最左_Mysql最左原则