阅读(3348)
赞(9)
TensorFlow函数教程:tf.lite.TFLiteConverter
2019-04-03 14:54:41 更新
tf.lite.TFLiteConverter函数
类 TFLiteConverter
别名:
- 类 tf.contrib.lite.TFLiteConverter
- 类 tf.lite.TFLiteConverter
定义在:tensorflow/lite/python/lite.py。
使用TOCO将TensorFlow模型转换为output_format。
这用于将TensorFlow GraphDef或SavedModel转换为TFLite FlatBuffer或图形可视化。
属性:
- inference_type:输出文件中实数数组的目标数据类型。一定是{tf.float32, tf.uint8}。(默认为tf.float32)
- inference_input_type:实数输入数组的目标数据类型。在量化的情况下允许输入数组使用不同的类型。一定是{tf.float32, tf.uint8}。(默认为inference_type)
- output_format:输出文件格式。目前一定是{TFLITE, GRAPHVIZ_DOT}。(默认为TFLITE)
- quantized_input_stats:表示输入张量名称的字符串的dict映射到表示训练数据平均值和标准偏差的浮点元组(例如,{“foo”:( 0.,1。)})。只需要inference_input_type是QUANTIZED_UINT8。real_input_value =(quantized_input_value - mean_value)/ std_dev_value。(默认为{})
- default_ranges_stats:表示没有指定范围的所有数组的(最小,最大)范围值的整数元组。用于通过“虚拟量化”进行量化试验。(默认为None)
- drop_control_dependency:Boolean,指示是否以静默方式删除控件依赖项。这是由于TFLite不支持控件依赖性。(默认为True)
- reorder_across_fake_quant:Boolean,指示是否在意料之外的位置重新排序FakeQuant节点。当FakeQuant节点的位置阻止转换图形所需的图形转换时使用。图表中的结果与量化的训练图表不同,可能导致不同的算术行为。(默认为False)
- change_concat_input_ranges:Boolean,用于更改量化模型的concat运算符的输入和输出的最小/最大范围行为。如果为true,则更改concat运算符重叠的范围。(默认为False)
- allow_custom_ops:Boolean,指示是否允许自定义操作。如果为False,则任何未知操作都是错误。如果为True,则为任何未知的操作创建自定义操作。开发人员需要使用自定义解析程序将这些提供给TensorFlow Lite运行时。(默认为False)
- post_training_quantize:Boolean,指示是否量化已转换的浮点模型的权重。模型尺寸将减小,并且会有延迟改进(以精度为代价)。(默认为False)
- dump_graphviz_dir:文件夹的完整文件路径,用于在处理GraphViz .dot文件的各个阶段转储图形。首选--output_format = GRAPHVIZ_DOT,以保持输出文件的要求。(默认为None)
- dump_graphviz_video:Boolean,指示在每次图形转换后是否转储图形。(默认为False)
- target_ops:实验标志,可能会有变化。一组OpsSet选项,指示要使用的转换器。(默认设置([OpsSet.TFLITE_BUILTINS]))
用法示例:
# 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的构造函数。
参数:
- graph_def:固有TensorFlow GraphDef。
- input_tensors:输入张量列表。使用foo.get_shape()和foo.dtype计算类型和shape。
- output_tensors:输出张量列表(仅使用.name)。
- input_arrays_with_shape:表示输入张量名称的字符串元组和表示输入shape的整数列表(例如,[("foo" : [1, 16, 16, 3])])。仅在无法将图形加载到TensorFlow中,并且input_tensors和output_tensors为None时使用。(默认为None)
- output_arrays:用于冻结图形的输出张量列表。仅在无法将图形加载到TensorFlow中,并且input_tensors和output_tensors为None时使用。(默认为None)
可能引发的异常:
- ValueError:无效的参数。
方法
convert
convert()
根据实例变量转换TensorFlow GraphDef。
返回:
转换后的数据采用序列化格式。TFLite Flatbuffer或Graphviz图表,取决于output_format中的值。
可能引发的异常:
- ValueError:未指定输入形状。input_tensor中的维度没有值。
from_frozen_graph
@classmethod
from_frozen_graph(
cls,
graph_def_file,
input_arrays,
output_arrays,
input_shapes=None
)
从包含冻结GraphDef的文件创建TFLiteConverter类。
参数:
- graph_def_file:包含冻结GraphDef的文件的完整文件路径。
- input_arrays:用于冻结图形的输入张量列表。
- output_arrays:用于冻结图形的输出张量列表。
- input_shapes:表示输入张量名称的字符串的Dict到表示输入shape的整数列表(例如,{"foo" : [1, 16, 16, 3]})。输入shape为None时自动确定(例如,{"foo" : None})。(默认为None)
返回:
TFLiteConverter类。
可能引发的异常:
- IOError: 文件未找到。无法解析输入文件。
- ValueError:图表未冻结。input_arrays或output_arrays包含无效的张量名称。必要时,未正确定义input_shapes。
from_keras_model_file
@classmethod
from_keras_model_file(
cls,
model_file,
input_arrays=None,
input_shapes=None,
output_arrays=None
)
从tf.keras模型文件创建TFLiteConverter类。
参数:
- model_file:包含tf.keras模型的HDF5文件的完整文件路径。
- input_arrays:用于冻结图形的输入张量列表。当没有提供时,使用来自SignatureDef的输入数组。(默认为None)
- input_shapes:表示输入张量名称的字符串的Dict到表示输入shape的整数列表(例如,{"foo" : [1, 16, 16, 3]})。输入shape为None时自动确定(例如,{"foo" : None})。(默认为None)。
- output_arrays:用于冻结图形的输出张量列表。当没有提供时,使用来自SignatureDef的输出数组。(默认为None)
返回:
TFLiteConverter类。
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
)
从SavedModel创建TFLiteConverter类。
参数:
- saved_model_dir:要转换的SavedModel目录。
- input_arrays:用于冻结图形的输入张量列表。当没有提供时,使用来自SignatureDef的输入数组。(默认为None)
- input_shapes:表示输入张量名称的字符串的Dict到表示输入shape的整数列表(例如,{"foo" : [1, 16, 16, 3]})。输入shape为None时自动确定(例如,{"foo" : None})。(默认为None)。
- output_arrays:用于冻结图形的输出张量列表。当没有提供时,使用来自SignatureDef的输出数组。(默认为None)
- tag_set:标识要在SavedModel中进行分析的MetaGraphDef的标记集。标签集中的所有标签都必须存在。(默认设置("serve"))
- signature_key:标识包含输入和输出的SignatureDef的关键字。(默认为DEFAULT_SERVING_SIGNATURE_DEF_KEY)
返回:
TFLiteConverter类。
from_session
@classmethod
from_session(
cls,
sess,
input_tensors,
output_tensors
)
从TensorFlow会话创建TFLiteConverter类。
参数:
- sess:TensorFlow会话。
- input_tensors:输入张量列表。使用foo.get_shape()和foo.dtype计算类型和shape。
- output_tensors:输出张量列表(仅使用.name)。
返回:
TFLiteConverter类。
get_input_arrays
get_input_arrays()
返回输入张量的名称列表。
返回:
字符串列表。