TensorFlow函数教程:tf.lite.TFLiteConverter

2019-04-03 17:40 更新

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()

返回输入张量的名称列表。

返回:

字符串列表。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号