python - 如何对多个模型的输出执行 SoftMax?
问题描述
我希望对 8 个类别进行分类。
我没有构建一个 8 类分类器,而是构建了 8 个二元分类器。每个二元分类器将一个类别与其他三个类别区分开来。例如,(0 vs 1+2+3+4+5+6+7)和(1 vs 0+2+3+4+5+6+7)等
如何运行一个SoftMax
函数来识别哪个分类器以最高的置信度预测了“0 类”?
解决方案
我写了一个不同的图表
现在让我们看看你有什么,看看你是否需要一个softmax。
首先,我的假设是您的分类器完全相同。
假设您通过模型推送记录,您会得到以下信息
P0=0.4 P_NOT_0=P1+P2+P3=0.6
P1=0.3 P_NOT_1=P0+P2+P3=0.7
P2=0.2 P_NOT_2=P0+P1+P3=0.8
P3=0.1 P_NOT_3=P0+P1+P2=0.9
您可能认为我“伪造”了数字以使 P0+P1+P2+P3=1,但我没有。没有其他可能的输出。
如果你不相信我,就这样做。为 P0 选择一个值并在所有公式中替换它。然后对 P1、P2 和 P3 执行相同的操作。您会看到,除非 P0+P1+P2+P3=1,否则您无法使所有公式都为真。
基本上如果所有的分类器都相同,那么所有公式中P0、P1、P2和P3的值都是相同的。
现在,回到你的问题。您不需要 softmax,因为 P1+P2+P3+P4 已经标准化。
我不知道你在做什么,但如果你只是在做一个多类分类模型,为什么不每个类都有一个输出,而不是最后使用 softmax?
您仍然需要帮助编写代码吗?
@andrey(在评论中)也带来了一些好处。首先,总是有一个错误,其次,如果您使用 sigmoid 作为每个分类器的输出,它们并不是真正的概率,但这个想法仍然适用。
推荐阅读
- docker - Logrotate: Docker + nginx. Can't reload nginx container (logrotate: ALERT exited abnormally with [1])
- verilog - Verilog:如何从 32 位移位器构建 64 位移位器(门级)
- python - 如何让我的 discord.py 机器人提及我的消息中提到的某人?
- java - 如何在 scala code whit tool jar 中获取关键信息?
- python - 即使安装了 3.9,终端仍然显示 python 版本 3.5
- javascript - 我无法从数组中获取项目供我的 Discord 机器人用来采取行动
- google-sheets - 谷歌表格用户定义函数权限错误
- flutter - 需要帮助解析 json 来颤动
- npm - 安装了哪个版本的 npm 包?
- elasticsearch - 如何在elasticsearch中将桶键排序为整数?