У мене є проблема класифікації сильно незбалансованих даних. Я читав, що надмірне зменшення розміру, а також зміна вартості для недостатньо представлених категоричних результатів призведе до кращого пристосування. Перш ніж це зробити, tensorflow би класифікував кожну інформацію як групу більшості (і набирав би точність понад 90%, настільки ж безглуздо, як це є).
Я помітив, що журнал зворотного відсотка кожної групи зробив найкращий множник, який я спробував. Чи існує більш стандартна маніпуляція для функції витрат? Це правильно реалізовано?
from collections import Counter
counts = Counter(category_train)
weightsArray =[]
for i in range(n_classes):
weightsArray.append(math.log(category_train.shape[0]/max(counts[i],1))+1)
class_weight = tf.constant(weightsArray)
weighted_logits = tf.mul(pred, class_weight)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(weighted_logits, y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)