【发布时间】:2019-10-05 06:35:57
【问题描述】:
看起来带有自定义层的 CoreML 在带有 Apple 神经引擎的设备上存在错误。
错误症状:在具有 ANE(如 iPhone XS)的设备上用于自定义层,函数“ouputShapes”在“setWeightData”之前调用。由于形状取决于输入权重数据的自定义层的结果可能会崩溃。在 iPad Air 2 等旧设备上一切正常。 正常情况下,函数 'setWeightData' 必须在 'ouputShapes' 之前调用。
【问题讨论】:
-
有趣的是,我根本无法让具有自定义层的模型在 ANE 上运行。您的自定义层是在神经网络的最末端,还是在中间的某个地方(即它后面是否还有其他层)?
-
@MatthijsHollemans 我有很多自定义层,从像 TensorFlow Gather 函数这样的小层到做一些后处理的绝对技术自定义层,自定义层在模型的开头和结尾。我描述的错误发生在模型初始化期间,我的应用程序在启动期间崩溃,我不知道它是否能够推断出 ANE 上的某些层。
-
你可以通过不使输出形状依赖于 weights 而是依赖于“参数”来解决这个问题,这是一个传递到自定义初始化的字典层。但我不确定这对您的自定义图层是否有意义。
-
@MatthijsHollemans hm 有趣的想法,考虑到矩阵只有二维因此我们可以将矩阵形状存储在两个整数参数中,我在几秒钟内发布可能的示例解决方案。
标签: coreml coremltools