2017-06-23 74 views

回答

1

您是否問正確的權重應用或如何在代碼中做到這一點?代碼很簡單:

class_weights = {} 
    for i in range(2): 
     class_weights[i] = your_weight 

,然後你傳遞參數class_weight=class_weightsmodel.fit

正確的權重使用將是某種反頻率;你也可以做一些試驗和錯誤。

+0

謝謝,這就是我一直在尋找 – Javi

2

fit()函數的class_weight參數是一個將類映射到權值的字典。假設您有500個0級樣本和1500個1級樣本,比您在class_weight = {0:3,1:1}中輸入的樣本多。這給了0級三倍於1級的重量。

train_generator.classes爲您提供適當的類名,以便進行加權。

如果你要計算這個程序,你可以使用scikit-learn's sklearn.utils.compute_class_weight():https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/utils/class_weight.py

功能着眼於標籤的分佈併產生權重下或過同樣處罰代表訓練集中的類。

另見本有用的線索在這裏:https://github.com/fchollet/keras/issues/1875

此線程也可能是因爲幫助:是否有可能從flow_from_directory自動推斷class_weight在Keras?

+0

最後一個明顯的例子!似乎沒有其他地方說權重是放大還是縮小 –

1

使用sklearn套件中的class_weight。

林也是用這個方法來處理不平衡數據

from sklearn.utils import class_weight 
class_weight = class_weight.compute_class_weight('balanced' 
               ,np.unique(Y_train) 
               ,Y_train) 

然後model.fit

Classifier.fit(train_X,train_Y,batch_size = 100, epochs = 10 
      ,validation_data= (test_X,test_Y),class_weight = class_weight)