參考書籍: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_
ωyit
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 參考位址 具體如何去解決還得結合業務去綜合考慮。下面幾個方式可能比較通用 寫流程先刪除快取 寫更新資料庫 再次刪除快取 避免在第二步的時候有讀請求訪問資料庫,然後把舊的值寫入到快取中 讀流程先讀...
併發操作與資料的不一致性
最近做的 選修課系統 需要考慮這樣乙個問題 資料庫的併發操作帶來的資料庫資料不一致問題 因為是全校性選修課,同一時間點大批學生選課,那麼必然存在多名學生同時對同一資料進行操作 是的問題,如果這種併發操作不加以控制的話,必會造成資料的不一致。一直知道有這種問題,並且知道這種問題的解決方法 加鎖 但是有...