我遇到了一个bug,这个bug似乎只有在android上运行我的TFLite模型时才会发生(我无法在python中复制它(。
Internal error: Failed to run on the given Interpreter: tensorflow/lite/kernels/gather_nd.cc:135 indices_has_only_positive_elements was not true.
为了追踪它,我试图在代码中加入断言。就我而言:
tf.assert_greater(tf.reduce_min(maxima_ij_coords), -1)
local_max_pixels = tf.cast(tf.gather_nd(image, maxima_ij_coords), tf.float32)
然而,在运行TFLite时,这些断言似乎不起作用。他们的工作就像是在执行力很强的情况下跑步一样。
有没有任何直接的方法可以在tflite模型中抛出运行时错误(最好是带有信息性消息的错误(?
在TensorFlow Lite中剥离断言是正确的,因为它们会在生产场景中增加开销。处理此类错误的最佳方法是使用TF-Lite错误报告API。您可以调用解释器->ReportError((带有一条消息,它将被报告给用户,但它适用于平台(在Android上登录,在Python上异常,等等(。在您的特定情况下,您可能需要添加一个检查,如:
if (tf.reduce_min(maxima_ij_coords) < 0) {
interpreter->ReportError(
"indices_has_only_positive_elements was not true.");
}
这将确保用户看到清晰的信息,同时不会影响成功案例中的性能。