我使用Keras进行对象检测,并将模型转换为用于移动部署的CoreML。
在python方面,预测方法在相同的图像上运行。预处理(平均去除)是在python端对keras进行的,而coreML ( red_bias,green_bias等)则由coreML处理。
预测输出是相同的,直到小数点第一位,但其余的小数位都是不同的。
我与numpy.testing.assert_array_almost_equal检查,得到4-10%的差异在输出阵列.
输出数组的大小为(1,10000,45)。
结果是不同的预测和目标检测输出。
对为什么会发生这种事有什么见解吗?
我怎样才能找到问题的根源并加以解决?
发布于 2018-05-24 21:11:55
假设您正确地完成了所有操作,并且模型在GPU上运行,那么这些类型的精确错误在整个过程中是非常重要的。GPU使用16位浮点数,它的精度只有3小数点,如果你的模型有很多层,那么这种精度误差就会累积起来。
此外,对于某些类型的模型,最后一层将有较大的权重和较大的(负)偏差(以迫使预测非常自信),这将放大精度误差。
尝试在CPU上而不是GPU上运行Core模型(参见MLPredictionOptions
)。如果现在的精度更高,那么它确实是16位浮标。
一般来说,这个问题没什么好担心的,因为(卷积的)神经网络对于这些精确性的问题是相当健壮的,而且您可能仍然可以从模型中得到适当的结果。
我的经验法则是,小于5e-2的误差是可以的,如果只有少数几个大于5e-2的误差,那么模型就很好。
https://stackoverflow.com/questions/50512211
复制相似问题