我应该用 tf.one_hot 对背景 class 进行什么编码?
what should I encode background class with tf.one_hot?
当我做一个class化工作时,我需要用one_hot方法编码一个classid。
但是我应该用 -1 编码背景 class 还是用 tf.one_hot
函数编码 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)
按照规范,您会像对待任何其他背景一样对待您的背景 class,并将其编码为 one_hot(on_value=1)
。如果你想强调这个 class 你可以使用加权 tf.nn.weighted_cross_entropy_with_logits
并为 class.
分配更高的权重
由于您依赖于 logits 的交叉熵,logits 函数的输出将始终在 0 和 1 之间。这意味着,只要您的模型看到背景输入,它总是会产生高损失值 class .这很可能会扰乱您的训练。这仍然并不意味着您不能使用 -1 或它在任何可以想象的情况下都不会产生积极影响。
当我做一个class化工作时,我需要用one_hot方法编码一个classid。
但是我应该用 -1 编码背景 class 还是用 tf.one_hot
函数编码 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)
按照规范,您会像对待任何其他背景一样对待您的背景 class,并将其编码为 one_hot(on_value=1)
。如果你想强调这个 class 你可以使用加权 tf.nn.weighted_cross_entropy_with_logits
并为 class.
由于您依赖于 logits 的交叉熵,logits 函数的输出将始终在 0 和 1 之间。这意味着,只要您的模型看到背景输入,它总是会产生高损失值 class .这很可能会扰乱您的训练。这仍然并不意味着您不能使用 -1 或它在任何可以想象的情况下都不会产生积极影响。