我有一个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用这种代码格式折磨了我,如果这篇文章看起来很奇怪,我很抱歉)
发布于 2019-12-23 01:34:38
不确定其他事情,但是softmax不能预测多个标签。你的softmax层的总和是1(根据softmax函数的数学设计),这意味着使用softmax你只能有一个答案(输出只有一个1,其他的都是零)。因此softmax的预期输出可以是
0,0,0,0,0,0,0,1,0
但不是
0,0,0,0,1,0,0,1,0,0
例如,如果您对多标签分类感兴趣,请尝试使用sigmoid层。
https://stackoverflow.com/questions/59446348
复制相似问题