損失函式約束類間不一致性

2021-10-10 03:30:53 字數 2164 閱讀 1369

參考書籍:python深度學習-基於pytorch

交叉熵損失函式對不同類之間的距離的區分性較小。原因:softmax具備分類能力但是不具備度量學習的特徵,沒法壓縮同一類別。因此,研究者們提出了幾種損失函式。

(1)三元組損失triplet loss

三元組損失屬於度量學習,通過計算兩張圖象之間的相似度,使得輸入影象被歸入到相似度大的影象類別中去。

l t=

∑[∥f

(xia

)−f(

xip)

∥22−

∥f(x

ia)−

f(xi

n)∥2

2+α]

+l_t=\sum [\left \| f(x_^) -f(x_^) \right \|_^-\left \| f(x_^) -f(x_^) \right \|_^+\alpha ]_

lt​=∑[

∥f(x

ia​)

−f(x

ip​)

∥22​

−∥f(

xia​

)−f(

xin​

)∥22

​+α]

+​∑

\sum

∑表示乙個batch內所有影象的損失和,xia

、xip

、xin

x_^、x_^、x_^

xia​、x

ip​、

xin​

為每次從訓練資料中去除的3張影象,前兩項為同一類,第三項為不同類。||表示歐式距離。+

_+​表示當括號內值大於0時,為括號內值,否則取0。

優點:使用量化學習解決特徵表示的類別間距問題;缺點:在訓練過程中,對元組的選擇的要求的技巧較高,而且要求資料集比較大。

(2)中心損失center loss

center loss用於壓縮同一類別,為每個類別提供乙個類別中心,最小化每個樣本與其類別中心的距離。

l c=

∑∥xi

−cyi

∥22l_c=\sum\|x_i-c_\|_2^2

lc​=∑∥

xi​−

cyi​

​∥22

​。其中,x

ix_i

xi​為乙個樣本,y

iy_i

yi​為對應樣本類別,cyi

c_cy

i​​為該類別中心。該損失函式可較好的解決類間內聚性。利用中心損失的同時,一般還會加上softmax損失以保證類間的可分性。所以,最終的損失函式包括softmax損失和中心損失。l=λ

×lc+

lsof

tmax

l=\lambda \times l_c+l_

l=λ×lc

​+ls

oftm

ax​.其中,λ

\lambda

λ用於平衡兩種損失函式,該權重越大,生成的特徵就會越具有內聚性。優點:訓練得到的特徵具有內聚性;缺點:當類別數目較多時(>10000)時,記憶體消耗大,對gpu的要求非常高。

(3)arcface損失additive angular margin loss該損失函式使用歸一化的網路權重和偏差來計算損失函式,對原輸出ωyi

txi+

byi\omega_^tx_i+b_

ωyi​t​

xi​+

byi​

​可轉化為∣ωy

i∣⋅∣

xi∣⋅

cos(

θ)|\omega_|\cdot|x_i|\cdot cos(\theta)

∣ωyi​​

∣⋅∣x

i​∣⋅

cos(

θ),θ

\theta

θ 為ωyi

,xi\omega_,x_i

ωyi​​,

xi​之間的角度。對輸出歸一化為s⋅(

cos(

θyi)

+m)s\cdot(cos(\theta_)+m)

s⋅(cos

(θyi

​​)+

m)得到新的損失函式為

資料庫 資料不一致性

3種資料不一致性 1 丟失修改 lost update 兩個事務t1和t2讀入同一資料並修改,t2提交結果破壞了t1提交的結果,到這t1的修改被丟失。2 不可重複讀 non repeatable read 不可重複讀是指事務t1讀取資料後,事務t2執行修改操作,使t1無法再現前一次讀取的結果 3 讀...

Redis 和 MySQL 資料不一致性

date 2020 11 25 15 16 00 updated 2020 11 25 15 55 00 參考位址 具體如何去解決還得結合業務去綜合考慮。下面幾個方式可能比較通用 寫流程先刪除快取 寫更新資料庫 再次刪除快取 避免在第二步的時候有讀請求訪問資料庫,然後把舊的值寫入到快取中 讀流程先讀...

併發操作與資料的不一致性

最近做的 選修課系統 需要考慮這樣乙個問題 資料庫的併發操作帶來的資料庫資料不一致問題 因為是全校性選修課,同一時間點大批學生選課,那麼必然存在多名學生同時對同一資料進行操作 是的問題,如果這種併發操作不加以控制的話,必會造成資料的不一致。一直知道有這種問題,並且知道這種問題的解決方法 加鎖 但是有...