Keras和CoreML预测的结果非常不同

时间:2018-05-24 14:44:41

标签: ios tensorflow keras coreml coremltools

我正在使用Keras进行对象检测,并将模型转换为CoreML以进行移动部署。

在python端,预测方法在同一图像上运行。预处理(均值删除)在python端为keras处理,由coreML(red_bias,green_bias等)由coreML处理。

预测输出与第一个小数位相同,但小数位的其余部分都不同。

我用numpy.testing.assert_array_almost_equal检查输出数组之间的差异是4-10%。

输出数组的大小(1,10000,45)。

结果是不同的预测和物体检测输出。

对于为什么会发生这种情况的任何见解?

如何找到问题的根源并修复它?

1 个答案:

答案 0 :(得分:1)

假设您已正确完成所有操作,并且模型在GPU上运行,那么这些类型的精度错误与课程相同。 GPU使用16位浮点数,精确到大约3位小数,如果你的模型有很多层,那么这样的精度误差就会累积。

此外,对于某些类型的模型,最后一层将具有较大的权重和较大的(负)偏差(以便强制预测非常有信心),这将放大精度误差。

尝试在CPU而不是GPU上运行Core ML模型(请参阅MLPredictionOptions)。如果精度现在更好,那么它确实是16位浮点数。

通常这个问题无需担心,因为(卷积)神经网络对于这样的精度问题非常强大,并且您可能仍然可以从模型中获得正确的结果。

我的经验法则是小于5e-2的误差是可以的,如果只有少数误差大于5e-2那么模型就可以了。