歡迎您光臨本站 註冊首頁

keras中模型訓練class

←手機掃碼閱讀     niceskyabc @ 2020-06-11 , reply:0

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,用於在訓練時調整損失函數(僅用於訓練)。可以傳遞一個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]  )

   


[niceskyabc ] keras中模型訓練class已經有242次圍觀

http://coctec.com/docs/python/shhow-post-238020.html