Вес класса ухудшает мою классификационную модель keras - PullRequest
0 голосов
/ 12 июля 2020

У меня есть модель, предназначенная для классификации некоторых данных, и она имеет целевой результат 21. Она использует оптимизатор Адама и категориальную кросс-энтропийную потерю. Пытаясь уменьшить потери модели, я сделал визуализацию частот классов в наборе данных и обнаружил, что верхние 2 класса имеют частоту около 25000 и 20000, а самые низкие 2 - около 4, 40. с другими классами. от 100 до 2000. Я понял, что это резкая разница в значениях, и попытался добавить веса классов, которые я извлек с помощью sklearn, например:

Мой массив y находится в стиле кодирования one-hot, что-то например:

class1,   class2, class3, class4 ... class21
   0        0       1       0    ...    0 
   1        0       0       0    ...    0
   0        1       0       0    ...    0
from sklearn.utils.class_weight import compute_class_weight

y_int = np.argmax(y.to_numpy(), axis=1)
weights = compute_class_weight('balanced', classes=np.unique(y_int), y=y_int)
di = dict(enumerate(class_weights))

, но мои потери ухудшились, и я начал получать значения потерь в диапазоне 30-50 к 50-й эпохе. что ужасно по сравнению с тем фактом, что без весов классов я получал около 0,4.

Что-то не так с тем, как я извлекал веса классов? или мне не следует полностью использовать веса классов? Если нет, что я должен использовать, чтобы учесть этот огромный дисбаланс? -Спасибо

1 Ответ

0 голосов
/ 15 июля 2020

Керас печатает взвешенные потери во время тренировки; вы можете подтвердить это, например, удвоив веса всех классов. Таким образом, большая потеря для взвешенной модели может просто свидетельствовать о том, что меньшие классы труднее классифицировать, и теперь, когда вы сосредотачиваете внимание потери на этих меньших классах, вы видите худшие оценки.

...