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