(11)pytorch之損失函式

2021-10-12 16:31:22 字數 3396 閱讀 5223

1.損失函式,代價函式,目標函式的區別:

損失函式:乙個樣本的差異

代價函式: 所有樣本損失的均值

目標函式:obj=cost+regulaization(正則項:防止過擬合)
a:nn.crossentropyloss:nn.logsoftmax()(資料歸一化)與nn.nllloss()結合,進行交叉熵計算。

主要引數 weight:各類別的loss設定權值,每個類別的權值

ignore_index:忽略某個類別,不計算loss

reduction:計算模式(none逐個計算/sum所有元素求和返回標量/mean加權平均返回標量)

inputs=t.

tensor([

[1,2

],[1

,3],

[1,3

]],dtype=t.float)

target=t.

tensor([

0,1,

1],dtype=t.long)

loss_f_none=nn.

crossentropyloss

(weight=none,reduction=

"none"

)loss_f_sum=nn.

crossentropyloss

(weight=none,reduction=

"sum"

)loss_f_mean=nn.

crossentropyloss

(weight=none,reduction=

"mean"

)loss_none=

loss_f_none

(inputs,target)

loss_sum=

loss_f_sum

(inputs,target)

loss_mean=

loss_f_mean

(inputs,target)

print

("cross entropy loss:\n"

,loss_none,loss_sum,loss_mean)

b:nn.nllloss:實現負對數似然函式中的負號功能(只實現了負號功能)

主要引數同上

c:nn.bceloss():二分類交叉熵,注意輸入值取值在0,1

主要引數同上

d:nn.bcewithlogitsloss:結合sigmoid與二分類交叉熵(模型中不用再加sigmoid了)

主要引數:同上,多了個pos_weight:正樣本的權值

e:回歸常用損失函式:nn.l1loss(計算output與target之差的絕對值)和nn.mseloss(計算outputs和target之差的平方)taget與output一一對應(形狀也相同)

smoothl1loss(平滑的l1損失函式,當差距過大時用不同的公式,最後取平均,這裡的x和y就是output和target)

f:poissonnllloss:泊松分布的負對數似然函式,分類為泊松分布時使用

主要引數:log_input:輸入是否為對數形式,決定計算公式,如上面

full:計算所有loss,預設為false

eps:修正項,避免log(input)為nan,避免當input為0的時候報錯,然式子+eps(很小不會影響正確性)

g:nn.kldivloss計算kl散度(相對熵),下面的式子為pytorch中的實際公式,上面的為理論上的(注意,我們的inputs需要通過nn.logsoftmax()計算log_probabilities)

引數:reduction多了乙個batchmean(batchsize維度求平均值)

h:nn.marginrankingloss:計算兩個向量之間的相似度,用於排序任務,返回乙個n*n(第一組中每個元素與第二組中的所有元素都進行loss計算)的loss矩陣

主要引數:margin:邊界值,x1與x2之間的差異值,(y取值1/-1,表示我們希望哪個大一些)

eduction:同上

loss_f_none=nn.marginrankingloss(margin=0,reduction=「none」)

loss=loss_f_none(x1,x2,target)target為y值

i:nn.multilabelmarginloss(多標籤(不是多分類,是乙個可能屬於多個類別))

eg:乙個四分類任務,樣本屬於0和3類,則標籤應該為[0,3,-1,-1]而非[1,0,0,1],那個where解釋了為什麼注意i≠y[j]即後面的x[i]為前面y[j]=-1對應的資料

含義:為了讓標籤神經元越來越明顯,越來越接近1,這樣才能減小loss

x=t.tensor([[0.1,0.2,0.4,0.8]])

y=t.tensor([[0,3,-1,-1]],dtype=t.long)

loss_f=nn.multilabelmarginloss(reduction=「none」)

loss=loss_f(x,y)

print(loss)

j:nn.softmarginloss(計算二分類的logistic損失)

主要引數:reduction

nn.multilabelsoftmarginloss(多標籤版本)

引數多了個weight:各個類別的loss設定權值,這個的y為[1,0,0,1]了

pytorch和keras損失函式區別

學習pytorch首先是要裝pytorch啦!但是這是乙個磨人的小妖精,傳統的用pip可是裝不上的。為此,可以參考我的另一篇部落格,這可是我研究一天的結晶!這篇筆記是 關於機器學習損失函式的,根據不同的應用場景,需要選擇不同的損失函式。線性回歸因為 的數值有具體的意義,所以損失函式一般使用的均方誤差...

機器學習之損失函式

有這樣乙個問題,損失函式和評價指標都是來評判模型的好與不好,它們之間有什麼區別?簡單區分可以理解為損失函式是用在模型訓練階段,用在梯度下降階段,做梯度更新,來讓損失函式最小化。評價指標是用在測試階段,也就是判斷生成的模型的好壞,評價指標有很多種,會單獨寫一篇文章。什麼是損失函式?在有監督學習中,真實...

Tensorflow筆記之(損失函式)

常用的損失函式有 1.均方誤差 tf.reduce mean tf.square 真實值 值 2.自定義損失函式 3.交叉熵 tf.nn.softmax cross entropy with logits lables 真實值,logits 值 通過 酸奶日銷量與影響因素x1,x2之間關係,理解損失...