【问题标题】:Keras and CoreML predicted outcomes are very differentKeras 和 CoreML 预测的结果非常不同
【发布时间】:2018-11-03 20:24:44
【问题描述】:

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

在 python 端,predict 方法在同一个图像上运行。 keras 的预处理(均值去除)在 python 端处理,coreML(red_bias、green_bias 等)由 coreML 处理。

预测输出到小数点后第一位是相同的,但小数点后的其余位都是不同的。

我检查 numpy.testing.assert_array_almost_equal 以获得输出数组中 4-10% 的差异。

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

结果是不同的预测和对象检测输出。

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

我怎样才能找到问题的根源并解决它?

【问题讨论】:

    标签: ios tensorflow keras coreml coremltools


    【解决方案1】:

    假设你做的每件事都正确,并且模型在 GPU 上运行,那么这些类型的精度误差是正常的。 GPU 使用 16 位浮点数,仅精确到小数点后 3 位,如果您的模型有很多层,那么这种精度误差会累积。

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

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

    一般来说,这个问题没什么好担心的,因为(卷积)神经网络对此类精度问题非常稳健,您可能仍会从模型中获得正确的结果。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-02
      • 2021-10-06
      • 2019-04-03
      • 2021-09-06
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 2018-01-17
      相关资源
      最近更新 更多