TF默认将输入图像分类为某个类别的阈值是多少?
例如,假设我有3类0
,1
,2
,和用于图像中的标签是独热编码,如下所示:[1, 0, 0]
,这意味着该图像具有0类的标签。
现在,当模型在softmax之后输出这样的预测时:[0.39, 0.56, 0.05]
TF是否使用0.5作为阈值,因此它预测的类别是1类?
如果所有预测都低于0.5,如[0.33, 0.33, 0.33]
TF会说结果如何,该怎么办?
是否有任何方法可以指定一个新的阈值(例如0.7)并确保TF表示如果没有任何类别预测高于该阈值,则预测是错误的?
在网络不确定类的情况下,该逻辑是否还会延续到推理阶段,否则它将拒绝对图像进行分类?
当模型在softmax之后输出这样的预测时:
[0.39, 0.56, 0.05]
TF是否使用0.5作为阈值,因此它预测的类别是1类?
不。这里没有任何门槛。Tensorflow(以及其他任何框架)将只获取最大的一个(argmax
);1
即使概率输出为,此处的结果(类)也将相同[0.33, 0.34, 0.33]
。
您似乎错误地认为,概率值0.5在3类分类问题中具有某些特殊意义。它没有:0.5的概率值仅在二进制分类设置中才是“特殊的” (就此而言,是平衡的)。在n
-class设置中,相应的“特殊”值是1/n
(此处为0.33),根据定义,在概率向量中总会有一些条目大于或等于该值。
如果所有预测都低于0.5,如
[0.33, 0.33, 0.33]
TF会说结果如何,该怎么办?
正如已经暗示的那样,在n> 2的n类问题中,所有概率都低于0.5的情况并不奇怪或令人意外。
现在,如果所有概率恰好相等,如您所展示的示例中所示(尽管在实践中极不可能,但是至少在理论上,这个问题是正确的),理想情况下,这种联系应该随机解决(即随机选择一个类) ); 实际上,由于通常通过argmax
Numpy方法处理此阶段,因此预测将是头等舱(即class 0
),这不难证明:
import numpy as np
x = np.array([0.33, 0.33, 0.33])
np.argmax(x)
# 0
由于Numpy如何处理此类情况-从argmax
docs中:
在多次出现最大值的情况下,返回对应于第一次出现的索引。
下一个问题:
有没有办法指定一个新的阈值,例如0.7,并确保TF表示如果没有类别预测高于该阈值,则预测是错误的?
不在Tensorflow(或任何其他框架)本身中,但这总是可以在推理过程中的后处理阶段完成:无论分类器实际返回什么,总是可以添加一些额外的逻辑,从而每当最大概率值小于阈值时,您的系统(即您的模型加上后处理逻辑)都会返回类似“我不知道/不确定/我无法回答”的信息。但这又是Tensorflow(或使用的任何其他框架)和模型本身的外部,它只能在推断期间使用,不能在推断期间使用 在训练过程中(无论如何,在训练过程中这没有意义,因为在训练过程中仅使用预测的课堂概率,而不是硬课堂)。
实际上,几年前,我们已经在一个玩具项目中实现了这样的后处理模块,该模块是一种在线服务,可以根据图像对狗的比赛进行分类:当模型返回的最大概率小于阈值时(就是这种情况) ,例如,当模型显示的是猫而不是狗的图像时,系统被编程为回答“您确定这是狗”这个问题,而不是被迫在模型中做出预测。预定义的狗比赛...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句