我有一个NN,在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的输入是预测基本事实的好输入-每当数字大于-1000
时,我们知道答案是0
。
出于某种原因,softmax函数无法学习类似的简单内容,并且总是给出答案(在对输出执行“ argmax”之后)
[0 0 0 0 0 0 0 0 0 ...]
有趣的是,当输入的0
的预测值为正数,1
的预测值为负,并且输入的精度为100%
时,就不会出错。
更有趣的是,当两组中的数字均为正时,也会犯错。
现在,我唯一的问题是-为什么在我的softmax对人类如此清晰的情况下,很难区分2
类的类。我觉得我在softmax中犯了一些基本的错误。
我想念什么?
谢谢!
(是,对不起,这里是第一个问题,stackoverflow用这种代码格式折磨了我,如果帖子看起来很奇怪,对不起)
答案 0 :(得分: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]
如果您对多标签分类感兴趣,请尝试例如使用S形层。