что я должен кодировать фоновый класс с tf.one_hot? - PullRequest
2 голосов
/ 17 мая 2019

Когда я делаю работу по классификации, мне нужно кодировать classid с помощью метода one_hot.Но стоит ли кодировать фоновый класс с -1 или 0 с помощью функции tf.one_hot?

Например:

// plan a
logits = [0.1, 0.1, 0.2, 0.3, 0.4]
classids = [-1,1,2,3,4] // -1 is background class
class_num = 5
on_hot_class = tf.one_hot(class_ids, depth=class_num)
loss = tf.keras.losses.categorical_crossentropy(one_hot_class,class_logits, from_logits=True)

// plan b 
logits = [0.1, 0.1, 0.2, 0.3, 0.4]
classids = [0,1,2,3,4] // 0 is background class
class_num = 5
on_hot_class = tf.one_hot(class_ids, depth=class_num)
loss = tf.keras.losses.categorical_crossentropy(one_hot_class,class_logits, from_logits=True)

1 Ответ

2 голосов
/ 17 мая 2019

Канонически, вы бы относились к своему фоновому классу так же, как к любому другому, и кодировали бы как one_hot(on_value=1).Если вы хотите подчеркнуть этот класс, вы можете использовать взвешенное значение tf.nn.weighted_cross_entropy_with_logits и присвоить этому классу больший вес.

Поскольку вы полагаетесь на кроссцентропию с логитами, выходные данные функции логитов всегда будут между 0 и 1.Это означает, что ваша модель всегда будет генерировать большое значение потерь всякий раз, когда видит входной сигнал фонового класса.Это очень может нарушить вашу тренировку.Это по-прежнему не означает, что вы не можете использовать -1 или что это не будет иметь никакого положительного эффекта в любой мыслимой ситуации.

...