概述:
權值均衡是指在模型訓練,計算loss的時候,通過權值來均衡資料的分布。正常情況下,每個類別在損失函式中的權值是1.0。但是有時候,當某些類別特別重要的時候,我們需要給該類別的訓練樣本更大的權值。
import keras
class_weight =
model.fit(x_train, y_train, epochs=10, batch_size=32, class_weight=class_weight)
先建立了乙個字典,其中,「買」類別為75%,表示了佔據了75%的loss,因為比「不買」的類別更加的重要,「不買」的類別設定成了25%。當然,這兩個數字可以修改,直到找到最佳的設定為止。我們可以使用這種方法來均衡不同的類別,當類別之間的樣本數量差別很大的時候。我們可以使用權值均衡的方式來使我們的所有的類別對loss的貢獻是相同的,而不用費力的收集少數類別的樣本了。
tensorflow實現:
1.構建交叉熵損失函式:
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y)+(y_-1)* tf.log(1-y)))
2.均衡正負樣本數量的loss首先在訓練資料中,通常來講正負樣本比例失調,為此,可以用調整loss權重的方式來緩解樣本數量不均衡的問題,如:
pos_ratio=num_of_positive/num_all # 類別1:佔總體的比例,較小如0.1
neg_ratio=num_of_negative/num_all # 類別2:佔總體的比例,較大如0.9
cross_entropy = tf.reduce_mean(-neg_ratio*tf.reduce_sum(y_ * tf.log(y)+pos_ratio*(y_-1)* tf.log(1-y)))
注:資料量少的類別損失項乘以乙個較大的係數,對損失影響較大。資料量多的類別損失項乘以乙個較小的係數,對網路的影響較小。
3.多分類的cross_entropy
如:
class1_weight=0.2 # 第一類的權重係數
class2_weight=0.5 # 第二類的權重係數
class3_weight=0.3 # 第三類的權重係數
cross_entropy = tf.reduce_mean(-class1_weight*tf.reduce
_sum(y_[:,0] * tf.log(y[:,0])-class2_weight*tf.reduce
_sum(y_[:,1] * tf.log(y[:,1])-class3_weight*tf.reduce
_sum(y_[:,2] * tf.log(y[:,2]))
注:因為標籤和**的結果都是one_hot的形式,因此在這裡y[:,0]就是第一類的概率值,其中第乙個維度的長度是minibatch的大小。同理y[:,0]就是第二類的概率值,在不同的項上乘以不同類別的權重係數,就可以一定程度上解決樣本數量不均衡所帶來的困擾。
難點:權值係數的選取需要不斷優化調整
參考:
注:博眾家之所長,集群英之薈萃。
損失函式 損失函式 Hinge
本文討論hinge損失函式,該函式是機器學習中常用的損失函式之一。在機器學習中,hinge loss是一種損失函式,它通常用於 maximum margin 的分類任務中,如支援向量機。數學表示式為 其中 表示 輸出,通常都是軟結果 就是說輸出不是0,1這種,可能是0.87。表示正確的類別。其函式影...
常見損失函式 損失函式選擇方法
神經網路的學習通過某個指標表示現在的狀態,然後以這個指標為基準,尋找最優權重引數,這個指標就是損失函式 loss function 如上介紹,神經網路損失函式 loss function 也叫目標函式 objective function 的作用 衡量神經網路的輸出與預期值之間的距離,以便控制 調節...
損失函式 SRGAN損失函式(目標函式)詳解
srgan的特點之一就是引進了損失感知函式,由此提公升了超解析度之後的細節資訊。本文主要像您介紹srgan使用的損失函式,及其keras實現。這是原文中給出的損失函式。容易看出,此損失函式包括兩部分,第一部分是感知損失,第二部分是正則化損失。感知損失是由李飛飛團隊提出的一種損失函式。感知損失分了兩部...