Tôi có một vấn đề phân loại với dữ liệu rất mất cân bằng. Tôi đã đọc rằng hơn và dưới mẫu cũng như thay đổi chi phí cho đầu ra phân loại không đúng mức sẽ dẫn đến phù hợp tốt hơn. Trước khi điều này được thực hiện, tenorflow sẽ phân loại từng đầu vào là nhóm đa số (và đạt được độ chính xác hơn 90%, vô nghĩa như vậy).
Tôi đã nhận thấy rằng nhật ký tỷ lệ nghịch của mỗi nhóm đã tạo ra hệ số nhân tốt nhất mà tôi đã thử. Có một thao tác tiêu chuẩn hơn cho chức năng chi phí? Điều này có được thực hiện đúng không?
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)