我应该使用tf.one_hot对背景类进行编码吗?

时间:2019-05-17 03:59:27

标签: python tensorflow classification one-hot-encoding

当我执行分类工作时,我需要使用one_hot方法对classid进行编码。 但是shuold我可以使用tf.one_hot函数用-1或0编码背景类吗?

例如:

// 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 个答案:

答案 0 :(得分:2)

通常,您将背景类与其他类一样对待,并编码为one_hot(on_value=1)。如果您想强调此类,可以使用加权tf.nn.weighted_cross_entropy_with_logits并为该类分配更高的权重。

由于您依赖于logits的交叉熵,因此logits函数的输出将始终在0到1之间。这意味着,只要模型看到背景类的输入,它就会始终产生高损失值。这很可能破坏您的训练。这仍然并不意味着您不能使用-1或在任何可以想象的情况下都不会产生积极影响。