這篇文章主要為大家展示了keras中模型訓練class_weight和sample_weight有什么區別,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。
keras 中fit(self, x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0,
validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0,
steps_per_epoch=None, validation_steps=None)
官方文檔中:
class_weight:字典,將不同的類別映射為不同的權值,該參數用來在訓練過程中調整損失函數(只能用于訓練)。該參數在處理非平衡的訓練數據(某些類的訓練樣本數很少)時,可以使得損失函數對樣本數不足的數據更加關注。
sample_weight:權值的numpy array,用于在訓練時調整損失函數(僅用于訓練)??梢詡鬟f一個1D的與樣本等長的向量用于對樣本進行1對1的加權,或者在面對時序數據時,傳遞一個的形式為(samples,sequence_length)的矩陣來為每個時間步上的樣本賦不同的權。這種情況下請確定在編譯模型時添加了sample_weight_mode='temporal'。
class_weight---主要針對的上數據不均衡問題,比如:異常檢測的二項分類問題,異常數據僅占1%,正常數據占99%; 此時就要設置不同類對loss的影響。
sample_weigh---主要解決的是樣本質量不同的問題,比如前1000個樣本的可信度,那么它的權重就要高,后1000個樣本可能有錯、不可信,那么權重就要調低。
補充知識:Keras 中數據不均衡時,metrics,class_weight的設置方法
當數據處理不均衡時,比如處理癌癥訓練問題,有病樣本很少,參考:
http://www.deepideas.net/unbalanced-classes-machine-learning/
主要從兩個方面著手:
一、loss函數的權重問題
訓練時,設置的權重:
class_weight={ 1: n_non_cancer_samples / n_cancer_samples * t }
二、編譯時設置模型的metrics
def sensitivity(y_true, y_pred): true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1))) possible_positives = K.sum(K.round(K.clip(y_true, 0, 1))) return true_positives / (possible_positives + K.epsilon()) def specificity(y_true, y_pred): true_negatives = K.sum(K.round(K.clip((1-y_true) * (1-y_pred), 0, 1))) possible_negatives = K.sum(K.round(K.clip(1-y_true, 0, 1))) return true_negatives / (possible_negatives + K.epsilon()) model.compile( loss='binary_crossentropy', optimizer=RMSprop(0.001), metrics=[sensitivity, specificity] )
以上就是關于keras中模型訓練class_weight和sample_weight有什么區別的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。