【问题标题】:Softmax function doesn't predictSoftmax 函数无法预测
【发布时间】:2020-04-14 05:06:23
【问题描述】:

我有一个神经网络,在 softmax 之前的最后一层输出中,我有 17 数字(每个患者的每个数字)。 这些是数字:

[[   -534.2598 ]
 [-255322.64   ]
 [-251120.55   ]
 [-248624.     ]
 [   -538.3214 ]
 [-255104.42   ]
 [-248609.89   ]
 [-253180.05   ]
 [-247280.56   ]
 [   -539.3145 ]
 [   -538.0261 ]
 [   -540.1227 ]
 [-254579.94   ]
 [   -532.4342 ]
 [   -531.34863]
 [   -528.2402 ]
 [-259635.69   ]]

现在,这些数字的基本事实是:

[[0 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1]]

现在可以非常清楚地看到,softmax 的输入是预测 ground truth 的一个很好的输入——每次这个数字都大于-1000——我们知道答案是0。 由于某种原因,softmax 函数无法学习这样简单的东西,并且总是给出答案(在对输出执行“argmax”之后)

 [0 0 0 0 0 0 0 0 0 ...]

有趣的是,当输入有正数作为0 的预测变量和负数作为1 的预测变量时,它不会出错,并获得100% 的准确性。

更有趣的是,当两组中的数字都是正数时,它也会出错。

现在,我唯一的问题是 - 为什么我的 softmax 很难区分 2 类型的类,因为它对人类来说如此清晰。我觉得我在 softmax 中犯了一些基本错误。

我错过了什么?

谢谢!

(是的,很抱歉这里的第一个问题,stackoverflow 用这种代码格式折磨了我,如果帖子看起来很奇怪,很抱歉)

【问题讨论】:

    标签: python deep-learning neural-network softmax


    【解决方案1】:

    其他的不清楚,但是softmax不能预测多个标签。您的 softmax 层的总和为 1(通过 softmax 函数的数学设计),这意味着使用 softmax 您只能有一个答案(输出只有一个 1 和其他零)。所以softmax的预期输出可以是

    [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]

    但没有

    [0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1]

    如果您对多标签分类感兴趣,请尝试使用 sigmoid 层。

    【讨论】:

    • 哦,不,我的意思是“[[0 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1]]”是我想在“argmax”之后得到的输出(每个数字这是每个患者的输出),而我只得到 17 个零(每个患者一个零)
    猜你喜欢
    • 2021-04-23
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多