【问题标题】:what should I encode background class with tf.one_hot?我应该用 tf.one_hot 对背景类进行什么编码?
【发布时间】:2019-10-04 08:56:34
【问题描述】:

当我做分类工作时,我需要用 one_hot 方法对一个 classid 进行编码。 但是我应该用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)

【问题讨论】:

标签: python tensorflow classification one-hot-encoding


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    相关资源
    最近更新 更多