假设我有一个输出 sigmoid (tanh),它产生的输出范围为 [-1, +1]。将此输出视为预测输出的置信度度量是否正确。输出值将介于 -1 和 +1 之间,但即使我的精度很高,我也看到这些值非常接近于零。
所以,我担心用这么低的数字显示输出值 * 100.0 可能不好。另一方面,我能够在验证集上获得高召回率和精度。
假设我有一个输出 sigmoid (tanh),它产生的输出范围为 [-1, +1]。将此输出视为预测输出的置信度度量是否正确。输出值将介于 -1 和 +1 之间,但即使我的精度很高,我也看到这些值非常接近于零。
所以,我担心用这么低的数字显示输出值 * 100.0 可能不好。另一方面,我能够在验证集上获得高召回率和精度。
在分类前馈神经网络的情况下,假设您的输出激活是 sigmoid那么你实际上有一个二项分布。如果你有一个单一的输出神经元,你会得到一个伯努利分布是二项分布的一个特例. (https://en.wikipedia.org/wiki/Bernoulli_distribution)
现在,正如您在 wiki 中看到的那样,伯努利分布的预测方差由下式给出,因此您可以说预测越高,您的方差越小,因此您越有信心。该领域正在进行研究,因为这不是对置信度的良好估计。
如果是连续数据,您可以遵循最近引入贝叶斯优化领域的另一种方法,并适合您的情况 ( http://arxiv.org/abs/1502.05700 )。作者建议使用线性输出层的均方误差(在非线性激活 tanh 或 sigmoid 之后)训练您的网络,然后训练贝叶斯线性回归模型。通过这种方式,您可以获得适当的贝叶斯置信区间,并且经验证明它们有效。
更具体地说,Torch7 中的实现将是:
-- DNGO network
model = nn.Sequential()
model:add(nn.Linear(ninputs,nhidden))
model:add(nn.Tanh())
model:add(nn.Linear(nhidden,nhidden))
model:add(nn.Tanh())
model:add(nn.Linear(nhidden,nhidden))
model:add(nn.Tanh())
model:add(nn.Linear(nhidden,noutputs))
最后,作者根据目标值对预测输出进行贝叶斯线性回归,获得置信区间。我相信这也非常适合您的情况,只需更改网络架构即可。