aba*_*arc 5 classification machine-learning keras tensorflow
TF 默认用于将输入图像分类为某个类别的阈值是多少?
例如,假设我有 3 个类0, 1, 2,图像的标签是 one-hot 编码的,如下所示:[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 并没有什么奇怪或意外的。
现在,如果所有概率恰好相等,如您所示的示例(尽管在实践中极不可能,但问题是有效的,至少在理论上),理想情况下,这种关系应该随机解决(即随机选择一个类) );在实践中,由于通常这个阶段是通过argmaxNumpy 的方法来处理的,因此预测将是第一类(即 class 0),这不难证明:
import numpy as np
x = np.array([0.33, 0.33, 0.33])
np.argmax(x)
# 0
Run Code Online (Sandbox Code Playgroud)
由于 Numpy 处理此类情况的方式 - 来自argmax文档:
如果多次出现最大值,则返回与第一次出现相对应的索引。
对于你的下一个问题:
有没有办法指定一个新的阈值(例如 0.7),并确保 TF 表示如果没有类别预测高于该阈值,则预测是错误的?
不是在 Tensorflow(或任何其他框架)本身中,但这始终可以在推理期间的后处理阶段完成:无论分类器实际返回什么,总是可以添加一些额外的逻辑,以便每当最大概率值小于阈值时,您的系统(即您的模型加上后处理逻辑)就会返回类似“我不知道/我不确定/我无法回答”的内容。但同样,这对于 Tensorflow(或使用的任何其他框架)和模型本身来说是外部的,并且只能在推理期间使用,而不能在训练期间使用(无论如何,在训练期间它没有意义,因为仅在训练期间)使用预测的类概率,而不是硬类)。
事实上,我们几年前在一个玩具项目中实现了这样的后处理模块,这是一个从图像中对赛狗进行分类的在线服务:当模型返回的最大概率小于阈值时(就是这种情况) ,例如,当向模型呈现猫而不是狗的图像时,系统被编程为回答问题“你确定这是一只狗吗?”,而不是被迫在预定义的赛狗比赛...
| 归档时间: |
|
| 查看次数: |
8453 次 |
| 最近记录: |