TF-lite模型测试失败,并出现运行时错误

时间:2019-01-02 12:04:07

标签: tensorflow-lite

我已经为MNIST分类创建了TF-lite模型(我正在使用TF 1.12.0,并在Google Colab上运行该模型),并且我想使用TensorFlow Lite Python解释器对其进行测试,如

https://github.com/freedomtan/tensorflow/blob/deeplab_tflite_python/tensorflow/contrib/lite/examples/python/label_image.py

但是当我尝试调用解释器时出现此错误-

RuntimeError                              Traceback (most recent call last)
<ipython-input-138-7d35ed1dfe14> in <module>()
----> 1 interpreter.invoke()

/usr/local/lib/python3.6/dist- 
packages/tensorflow/contrib/lite/python/interpreter.py in invoke(self)
251       ValueError: When the underlying interpreter fails raise 
ValueError.
252     """
--> 253     self._ensure_safe()
254     self._interpreter.Invoke()
255 

/usr/local/lib/python3.6/dist- 
packages/tensorflow/contrib/lite/python/interpreter.py in 
_ensure_safe(self)
 97       in the interpreter in the form of a numpy array or slice. Be sure 
 to
 98       only hold the function returned from tensor() if you are using 
 raw
 ---> 99       data access.""")

101   def _get_tensor_details(self, tensor_index):

 RuntimeError: There is at least 1 reference to internal data
  in the interpreter in the form of a numpy array or slice. Be sure to
  only hold the function returned from tensor() if you are using raw
  data access.

这是代码-

import numpy as np

# Load TFLite model and allocate tensors.
interpreter = 
tf.contrib.lite.Interpreter(model_path="mnist/mnist_custom.tflite")
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
input_details

[{'dtype':numpy.float32,   '索引':3,   '名称':'conv2d_1_input',   '量化':(0.0,0),   'shape':array([1,28,28,1],dtype = int32)}]

test_images[0].shape

(28,28,1)

input_data = np.expand_dims(test_images[0], axis=0)
input_data.shape

(1、28、28、1)

interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke()

问题是我不明白此消息的含义以及如何处理。

1 个答案:

答案 0 :(得分:2)

tf.convert_to_tensorinterpreter.set_tensor为我完成了工作

tensor_index = interpreter.get_input_details()[0]['index']
input_tensor_z= tf.convert_to_tensor(z, np.float32)
interpreter.set_tensor(tensor_index, input_tensor_z)

我已经创建了一个end2end示例,从训练Keras模型开始,以将其在TensorFlow Lite here上使用

我还在this主题中发布了相同的答案