.predict 返回二进制结果而不是百分比

Posted

技术标签:

【中文标题】.predict 返回二进制结果而不是百分比【英文标题】:.predict returning binary results and not percentages 【发布时间】:2018-11-18 15:53:47 【问题描述】:

你好我的模型编译如下

model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

我只是在运行一个

print(model.predict(test_tensor))

返回[[0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]]

最后一层是 softmax 激活,所以不应该这样做。

编辑:我也尝试过 predict_proba 并没有成功

【问题讨论】:

1.0 = 100%,这仍然是一个百分比。 不应该达到 100% 的置信度 不,这是一个典型的误解。 softmax 产生类似单热的概率是很常见的。 不,在这种情况下这不是一个误解。这些预测绝对不应该是 100%,我并不是说它是现状,但我的意思是对于这种情况,分类之间的相似性太高而不会发生。 我认为您完全忽略了 softmax + 交叉熵并没有真正产生有意义的置信度,由此产生的不确定性非常糟糕,正如您在自己的结果中看到的那样。为了获得有意义的校准概率,您必须使用其他方法。 【参考方案1】:

理论上你是对的,它会无限接近 1,但请记住,我们使用固定位数的浮点数来表示它们。因此,在值达到某个 epsilon 1 后,它会被四舍五入。这也发生在其他条目上。因此,您会得到 100% 可信的预测。

为什么您的模型会预测这一点?可能是班级人数过多,因此变得非常自信。您训练了很长时间,因此权重会饱和,尤其是在您没有任何正则化的情况下。

【讨论】:

所有分类都在大约相同数量的 img 数据(每个数千个)上进行训练,然后上传。所有分类看起来也非常相似,因此模型不可能 100% 预测它们。

以上是关于.predict 返回二进制结果而不是百分比的主要内容,如果未能解决你的问题,请参考以下文章

从 Keras model.predict_generator 计算准确率

PostgreSQL 性能,使用 ILIKE 仅占两个百分比而不是根本不使用

Amazon Redshift:是不是可以返回多个结果集?

输入值以百分比返回预测[关闭]

使用滞后函数(TSQL)返回0获得销售差异

Android 透明度百分比对应的 十六进制