PyTorch logit函数
1.PyTorch vs TensorFlow
tensorflow是靜態(tài)圖,需要你把啥都準備好,然后它像個傻子一樣執(zhí)行,tensorflow,目前業(yè)界更適合部署,畢竟是靜態(tài)圖,infer的時候速度快。
pytorch,它會在執(zhí)行的時候,跟你嘮嗑,哪哪需要改不,哦,不改昂,那我執(zhí)行了,pytorch更適合學(xué)術(shù)界,因為它更開發(fā)、調(diào)試更人性化。
(人工智能核心算法的底層還是由C/C++編寫,python實際上實現(xiàn)API調(diào)用功能)
2.logit函數(shù)
該函數(shù)可以將輸入范圍在[0,1]之間的數(shù)值p映射到[?∞,∞][?∞,∞]
如果p=0.5,則函數(shù)值為0,p<0.5,則函數(shù)值為負值;如果p>0.5,則函數(shù)值為正值。
PyTorch(tensorflow類似)的損失函數(shù)中,有一個(類)損失函數(shù)名字中帶了with_logits.。而這里的logits指的是,該損失函數(shù)已經(jīng)內(nèi)部自帶了計算logit的操作,無需在傳入給這個loss函數(shù)之前手動使用sigmoid/softmax將之前網(wǎng)絡(luò)的輸入映射到[0,1]之間。
不管是二分類,還是多分類問題,其實在計算損失函數(shù)的過程都經(jīng)歷了三個步驟:
(1)激活函數(shù)。通過激活函數(shù)sigmoid或者是softmax將輸出值縮放到[0,1]之間;
(2)求對數(shù)。計算縮放之后的向量的對數(shù)值,即所謂的logy的值,求對數(shù)之后的值在[-infinite,0]之間;
(3)累加求和。根據(jù)損失函數(shù)的定義,將標簽和輸出值逐元素相乘再求和,最后再添加一個負號求相反數(shù),得到一個正數(shù)損失。
不管什么樣的實現(xiàn)方式,都會經(jīng)歷這三個步驟,不同的是,可能有的函數(shù)會將其中的一個或者是幾個步驟封裝在一起。
例如:
(1)BCELoss:需要先將最后一層經(jīng)過sigmoid進行縮放然后再通過該函數(shù);
(2)BCEWithLogitsLoss:BCEWithLogitsLoss就是把Sigmoid-BCELoss合成一步,不再需要在最后經(jīng)過sigmoid進行縮放,直接對最后得到的logits進行處理。
注意:logits,指的是還沒有經(jīng)過sigmoid和softmax縮放的結(jié)果
補充:
三維tensor(C,H,W),dim=0,1,2,-1(可理解為維度索引),其中2與-1等價,相同效果:
當(dāng)dim=0時, 是對每一維度相同位置的數(shù)值進行softmax運算,和為1
當(dāng)dim=1時, 是對某一維度的列進行softmax運算,和為1
當(dāng)dim=2時, 是對某一維度的行進行softmax運算,和為1
同樣的,四維tensor(B,C,H,W)dim取值0,1,2,3,-1,三維tensor也可以看成是batchsize=1的四維tensor,只是dim的索引需要加1。
總結(jié)
以上是生活随笔為你收集整理的PyTorch logit函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #红绿蓝颜色编码RGB
- 下一篇: python入门学习记录之pygame实