它允许您使用一组TensorFlow操作并注释构造,以便toco知道如何将其转换为tflite。这在张量流图中嵌入了一个伪函数。这允许在较低级别的TensorFlow实现中嵌入高级API使用信息,以便以后可以替换其他实现。本质上,这个伪op中的任何“输入”都被输入到一个标识中,并且属性被添加到该输入中,然后由构成伪op的组成ops使用。
__init__()
- __init__(
- function_name,
- level=1,
- children_inputs_mappings=None,
- **kwargs
- )
创建一个OpHint。
参数:
level
:OpHint水平。add_input
- add_input(
- *args,
- **kwargs
- )
向提示添加一个包装好的输入参数。
参数:
返回值:
add_output
- add_output(
- *args,
- **kwargs
- )
在提示中添加一个包装好的输出参数。
参数:
返回值:
add_outputs
- add_outputs(
- *args,
- **kwargs
- )
将一系列输出添加到函数调用中。
参数:
返回值:
从概念上跟踪“OpHint 函数”参数的索引。这些函数的输入和参数都使用类的实例,因此它们可以有独立的编号。
__init__
- __init__(
- function_name,
- unique_function_id,
- node_name_prefix,
- attr_name,
- level=1,
- children_inputs_mappings=None
- )
初始化ophint论点。
参数:
level
:层次层次的Ophint节点,一个数字。add
- add(
- arg,
- tag=None,
- name=None,
- aggregate=None,
- index_override=None
- )
返回输入张量的一个包绕张量作为参数。
参数:
arg:
一个张量应该被认为是一个参数。tag
:用于标识应该打包的参数的字符串标记。aggregate
:聚合策略。可接受的值是OpHint。AGGREGATE_FIRST OpHint。AGGREGATE_LAST, OpHint.AGGREGATE_STACK。注意,只有在指定标记时聚合才有效。返回值:
可能产生的异常:
ValueError
: When indices are not consistent.这使得在Python中可以访问TensorFlow Lite解释器。可以在多线程Python环境中使用这个解释器,但是必须确保每次只从一个线程调用特定实例的函数。因此,如果希望有4个线程同时运行不同的推论,请为每个线程创建一个解释器作为线程本地数据。类似地,如果您在单个解释器的一个线程中调用invoke(),但是希望在另一个线程上使用张量(),那么在调用张量()之前,必须在线程之间使用同步原语,以确保调用已经返回。
__init__
- __init__(
- model_path=None,
- model_content=None
- )
构造函数。
参数:
可能产生的异常:
ValueError
: If the interpreter was unable to create.allocate_tensors
allocate_tensors()
get_input_details
get_input_details()
获取模型输入细节。
返回值:
get_output_details
get_output_details()
获取模型输出详细信息。
返回值:
get_tensor
get_tensor(tensor_index)
获取输入张量的值(获取副本)。如果希望避免复制,可以使用张量()。此函数不能用于读取中间结果。
参数:
返回值:
get_tensor_details
get_tensor_details()
获取具有有效张量细节的每个张量的张量细节。如果找不到张量所需的信息,张量就不会添加到列表中。这包括没有名称的临时张量。
返回值:
invoke
invoke()
调用解释器。在调用此函数之前,请确保设置输入大小、分配张量和填充值。另外,请注意,这个函数释放了GIL,因此在Python解释器继续运行时,可以在后台完成繁重的计算。当invoke()调用尚未完成时,不应调用此对象上的任何其他函数。
可能产生的异常:
ValueError
: When the underlying interpreter fails raise ValueError.reset_all_variables
reset_all_variables()
resize_tensor_input
- resize_tensor_input(
- input_index,
- tensor_size
- )
调整输入张量的大小。
参数:
可能产生的异常:
ValueError
: If the interpreter could not resize the input tensor.set_tensor
- set_tensor(
- tensor_index,
- value
- )
设置输入张量的值。注意,这将复制值中的数据。如果希望避免复制,可以使用张量()函数获得指向tflite解释器中的输入缓冲区的numpy缓冲区。
参数:
tensor_index
:张量的张量索引。这个值可以从get_input_details中的'index'字段中得到。value
:要设置的张量的值。可能产生的异常:
ValueError
: If the interpreter could not set the tensor.tensor
tensor(tensor_index)
返回一个函数,该函数给出当前张量缓冲区的numpy视图。这允许读写这个张量的w/o拷贝。这更紧密地反映了c++解释器类接口的张量()成员,因此得名。注意不要通过调用allocate_tenators()和invoke()来保存这些输出引用。此函数不能用于读取中间结果。
用法:
- interpreter.allocate_tensors()
- input = interpreter.tensor(interpreter.get_input_details()[0]["index"])
- output = interpreter.tensor(interpreter.get_output_details()[0]["index"])
- for i in range(10):
- input().fill(3.)
- interpreter.invoke()
- print("inference %s" % output())
注意这个函数如何避免直接生成numpy数组。这是因为重要的是不要对数据持有实际的numpy视图超过必要的时间。如果这样做,则不能再调用解释器,因为解释器可能会调整大小并使引用的张量无效。NumPy API不允许底层缓冲区的任何可变性。
错误:
- input = interpreter.tensor(interpreter.get_input_details()[0]["index"])()
- output = interpreter.tensor(interpreter.get_output_details()[0]["index"])()
- interpreter.allocate_tensors() # This will throw RuntimeError
- for i in range(10):
- input.fill(3.)
- interpreter.invoke() # this will throw RuntimeError since input,output
参数:
返回值:
类定义可用于生成TFLite模型的操作系统集。
Enum定义在生成tflite图时要应用的优化。
用于评估优化的代表性数据集。可用于评估转换器优化的代表性数据集。例如,转换器可以使用这些例子来估计(最小,最大)范围校准模型的输入。这可以允许转换器量化转换后的浮点模型。
1、__init__
__init__(input_gen)
创建一个代表性数据集。
参数:
目标设备规格。关于目标设备的详细信息。转换器为特定的设备优化生成的模型。
属性:
__init__
__init__(supported_ops=None)
将TensorFlow模型转换为output_format。这用于将TensorFlow GraphDef或SavedModel转换为TFLite FlatBuffer或图形可视化。
属性:
inference
_type:输出文件中实数数组的目标数据类型。必须{特遣部队。float32 tf.uint8}。如果提供了优化,则忽略此参数。(默认tf.float32)inference
_input_type:实数输入数组的目标数据类型。允许不同类型的输入数组。如果提供了整数类型而没有使用优化,则必须提供quantized_inputs_stats。如果推论类型是tf。从具有量化意识的训练输入模型到完全量化模型的信号转换,然后推论_input_type默认为tf.uint8。在所有其他情况下,推论_input_type默认为tf.float32。必须{特遣部队。float32,特遣部队。uint8, tf.int8}inference
_output_type:实数输出数组的目标数据类型。允许不同类型的输出数组。如果推论类型是tf。从具有量化意识的训练输出模型到完全量化模型的信号转换,然后推论_output_type默认为tf.uint8。在所有其他情况下,推论_output_type必须是tf。否则将抛出一个错误。必须{特遣部队。float32,特遣部队。uint8, tf.int8}optimizations
:实验标志,可能会更改。转换模型时要应用的优化列表。如[Optimize.DEFAULT]。用例:
- # Converting a GraphDef from session.
- converter = lite.TFLiteConverter.from_session(sess, in_tensors, out_tensors)
- tflite_model = converter.convert()
- open("converted_model.tflite", "wb").write(tflite_model)
-
- # Converting a GraphDef from file.
- converter = lite.TFLiteConverter.from_frozen_graph(
- graph_def_file, input_arrays, output_arrays)
- tflite_model = converter.convert()
- open("converted_model.tflite", "wb").write(tflite_model)
-
- # Converting a SavedModel.
- converter = lite.TFLiteConverter.from_saved_model(saved_model_dir)
- tflite_model = converter.convert()
-
- # Converting a tf.keras model.
- converter = lite.TFLiteConverter.from_keras_model_file(keras_model)
- tflite_model = converter.convert()
__init__
- __init__(
- graph_def,
- input_tensors,
- output_tensors,
- input_arrays_with_shape=None,
- output_arrays=None
- )
TFLiteConverter构造函数。
参数:
output_tensors:
输出张量列表(仅使用.name)。可能产生的异常:
ValueError
: Invalid arguments.convert
convert()
基于实例变量转换TensorFlow GraphDef。
返回值:
可能产生的异常:
ValueError
: Input shape is not specified. None value for dimension in input_tensor.from_frozen_graph
- @classmethod
- from_frozen_graph(
- cls,
- graph_def_file,
- input_arrays,
- output_arrays,
- input_shapes=None
- )
从包含冻结GraphDef的文件中创建TFLiteConverter类。
参数:
返回值:
可能产生的异常:
IOError
: File not found. Unable to parse input file.ValueError
: The graph is not frozen. input_arrays or output_arrays contains an invalid tensor name. input_shapes is not correctly defined when requiredfrom_keras_model_file
- @classmethod
- from_keras_model_file(
- cls,
- model_file,
- input_arrays=None,
- input_shapes=None,
- output_arrays=None,
- custom_objects=None
- )
从tf创建TFLiteConverter类。keras模型文件。
参数:
返回值:
from_session
- @classmethod
- from_session(
- cls,
- sess,
- input_tensors,
- output_tensors
- )
从TensorFlow会话创建TFLiteConverter类。
参数:
sess
:TensorFlow会话。output_tensors:
输出张量列表(仅使用.name)。返回值:
get_input_arrays
get_input_arrays()
返回输入张量的名称列表。
返回值:
使用TOCO将TensorFlow模型转换为output_format。这个类已经被弃用。请使用lite。TFLiteConverter代替。
from_frozen_graph
- @classmethod
- from_frozen_graph(
- cls,
- graph_def_file,
- input_arrays,
- output_arrays,
- input_shapes=None
- )
从包含冻结图的文件创建TocoConverter类。(弃用)
from_keras_model_file
- @classmethod
- from_keras_model_file(
- cls,
- model_file,
- input_arrays=None,
- input_shapes=None,
- output_arrays=None
- )
从tf创建一个TocoConverter类。keras模型文件。(弃用)
from_saved_model
- @classmethod
- from_saved_model(
- cls,
- saved_model_dir,
- input_arrays=None,
- input_shapes=None,
- output_arrays=None,
- tag_set=None,
- signature_key=None
- )
从保存模型创建TocoConverter类。(弃用)
from_session
- @classmethod
- from_session(
- cls,
- sess,
- input_tensors,
- output_tensors
- )
从TensorFlow会话创建TocoConverter类。(弃用)
使用TOCO转换模型。(弃用)
- tf.lite.toco_convert(
- input_data,
- input_tensors,
- output_tensors,
- *args,
- **kwargs
- )
通常,这个函数用于将TensorFlow GraphDef转换为TFLite。可以通过提供传递给build_toco_convert_protos的参数来定制转换(有关详细信息,请参阅文档)。此函数已被弃用。请使用lite。TFLiteConverter代替。
参数:
output_tensors
:
输出张量列表(仅使用.name)。返回:
可能产生的异常:
build_toco_convert_protos
.'