我是TensorFlow和TensorFlow Lite的新手。我遵循了有关如何使用toco
将模型量化并将模型转换为定点计算的教程。现在,我有一个tflite
文件,该文件应该仅执行定点操作。我有两个问题
如果有人可以指导我,我将非常感激。
感谢和问候,
阿比纳夫·乔治
答案 0 :(得分:1)
是否可以在此tflite文件中添加新节点或操作?如果可以,怎么办?
不幸的是,否,这实际上是一件好事。 TF-Lite的设计轻巧高效,它使用映射文件,平面缓冲区,静态执行计划等来减少内存占用。这样做的代价是您失去了TensorFlow的任何灵活性。
TF-Lite是用于部署的框架。但是,在Google IO的早期,TF团队提到了进行设备上培训的可能性,因此将来可能会提供某种灵活性,但现在不是。
如何在python中对此进行测试?如何访问tflite文件中的所有操作和结果?
您无法访问所有内部操作,只能输入和输出。原因很简单:内部张量不会被保存,因为它们的内存部分也用于其他操作(这就是为什么它的内存占用量如此之小)的原因。
如果只想查看输出,可以使用以下Python API(代码不言自明):
import pprint
from tensorflow.contrib.lite.python import interpreter as interpreter_wrapper
# Load the model and allocate the static memory plan
interpreter = interpreter_wrapper.Interpreter(model_path='model.tflite')
interpreter.allocate_tensors()
# print out the input details
input_details = interpreter.get_input_details()
print('input_details:')
pp = pprint.PrettyPrinter(indent=2)
pp.pprint(input_details)
# print out the output details
output_details = interpreter.get_output_details()
print('output_details:')
pp = pprint.PrettyPrinter(indent=2)
pp.pprint(output_details)
# set input (img is a `numpy array`)
interpreter.set_tensor(input_details[0]['index'], img)
# forward pass
interpreter.invoke()
# get output of the network
output = interpreter.get_tensor(output_details[0]['index'])
如果我为非输入和非输出张量调用
interpreter.get_tensor
怎么办?
执行相应的操作后,您将不会获得该张量中包含的实际数据。如前所述,张量的存储部分与其他张量共享,以实现最大效率。