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之間關係,理解損失...