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