TensorFlow函數(shù)教程:tf.lite.TFLiteConverter

2019-04-03 17:40 更新

tf.lite.TFLiteConverter函數(shù)

類 TFLiteConverter

別名:

  • 類 tf.contrib.lite.TFLiteConverter
  • 類 tf.lite.TFLiteConverter

定義在:tensorflow/lite/python/lite.py。

使用TOCO將TensorFlow模型轉(zhuǎn)換為output_format。

這用于將TensorFlow GraphDef或SavedModel轉(zhuǎn)換為TFLite FlatBuffer或圖形可視化。

屬性:

  • inference_type:輸出文件中實數(shù)數(shù)組的目標數(shù)據(jù)類型。一定是{tf.float32, tf.uint8}。(默認為tf.float32)
  • inference_input_type:實數(shù)輸入數(shù)組的目標數(shù)據(jù)類型。在量化的情況下允許輸入數(shù)組使用不同的類型。一定是{tf.float32, tf.uint8}。(默認為inference_type)
  • output_format:輸出文件格式。目前一定是{TFLITE, GRAPHVIZ_DOT}。(默認為TFLITE)
  • quantized_input_stats:表示輸入張量名稱的字符串的dict映射到表示訓練數(shù)據(jù)平均值和標準偏差的浮點元組(例如,{“foo”:( 0.,1。)})。只需要inference_input_type是QUANTIZED_UINT8。real_input_value =(quantized_input_value - mean_value)/ std_dev_value。(默認為{})
  • default_ranges_stats:表示沒有指定范圍的所有數(shù)組的(最小,最大)范圍值的整數(shù)元組。用于通過“虛擬量化”進行量化試驗。(默認為None)
  • drop_control_dependency:Boolean,指示是否以靜默方式刪除控件依賴項。這是由于TFLite不支持控件依賴性。(默認為True)
  • reorder_across_fake_quant:Boolean,指示是否在意料之外的位置重新排序FakeQuant節(jié)點。當FakeQuant節(jié)點的位置阻止轉(zhuǎn)換圖形所需的圖形轉(zhuǎn)換時使用。圖表中的結(jié)果與量化的訓練圖表不同,可能導致不同的算術(shù)行為。(默認為False)
  • change_concat_input_ranges:Boolean,用于更改量化模型的concat運算符的輸入和輸出的最小/最大范圍行為。如果為true,則更改concat運算符重疊的范圍。(默認為False)
  • allow_custom_ops:Boolean,指示是否允許自定義操作。如果為False,則任何未知操作都是錯誤。如果為True,則為任何未知的操作創(chuàng)建自定義操作。開發(fā)人員需要使用自定義解析程序?qū)⑦@些提供給TensorFlow Lite運行時。(默認為False)
  • post_training_quantize:Boolean,指示是否量化已轉(zhuǎn)換的浮點模型的權(quán)重。模型尺寸將減小,并且會有延遲改進(以精度為代價)。(默認為False)
  • dump_graphviz_dir:文件夾的完整文件路徑,用于在處理GraphViz .dot文件的各個階段轉(zhuǎn)儲圖形。首選--output_format = GRAPHVIZ_DOT,以保持輸出文件的要求。(默認為None)
  • dump_graphviz_video:Boolean,指示在每次圖形轉(zhuǎn)換后是否轉(zhuǎn)儲圖形。(默認為False)
  • target_ops:實驗標志,可能會有變化。一組OpsSet選項,指示要使用的轉(zhuǎn)換器。(默認設(shè)置([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的構(gòu)造函數(shù)。

參數(shù):

  • graph_def:固有TensorFlow GraphDef。
  • input_tensors:輸入張量列表。使用foo.get_shape()和foo.dtype計算類型和shape。
  • output_tensors:輸出張量列表(僅使用.name)。
  • input_arrays_with_shape:表示輸入張量名稱的字符串元組和表示輸入shape的整數(shù)列表(例如,[("foo" : [1, 16, 16, 3])])。僅在無法將圖形加載到TensorFlow中,并且input_tensors和output_tensors為None時使用。(默認為None)
  • output_arrays:用于凍結(jié)圖形的輸出張量列表。僅在無法將圖形加載到TensorFlow中,并且input_tensors和output_tensors為None時使用。(默認為None)

可能引發(fā)的異常:

  • ValueError:無效的參數(shù)。

方法

convert

convert()

根據(jù)實例變量轉(zhuǎn)換TensorFlow GraphDef。

返回:

轉(zhuǎn)換后的數(shù)據(jù)采用序列化格式。TFLite Flatbuffer或Graphviz圖表,取決于output_format中的值。

可能引發(fā)的異常:

  • ValueError:未指定輸入形狀。input_tensor中的維度沒有值。

from_frozen_graph

@classmethod
from_frozen_graph(
    cls,
    graph_def_file,
    input_arrays,
    output_arrays,
    input_shapes=None
)

從包含凍結(jié)GraphDef的文件創(chuàng)建TFLiteConverter類。

參數(shù):

  • graph_def_file:包含凍結(jié)GraphDef的文件的完整文件路徑。
  • input_arrays:用于凍結(jié)圖形的輸入張量列表。
  • output_arrays:用于凍結(jié)圖形的輸出張量列表。
  • input_shapes:表示輸入張量名稱的字符串的Dict到表示輸入shape的整數(shù)列表(例如,{"foo" : [1, 16, 16, 3]})。輸入shape為None時自動確定(例如,{"foo" : None})。(默認為None)

返回:

TFLiteConverter類。

可能引發(fā)的異常:

  • IOError: 文件未找到。無法解析輸入文件。
  • ValueError:圖表未凍結(jié)。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模型文件創(chuàng)建TFLiteConverter類。

參數(shù):

  • model_file:包含tf.keras模型的HDF5文件的完整文件路徑。
  • input_arrays:用于凍結(jié)圖形的輸入張量列表。當沒有提供時,使用來自SignatureDef的輸入數(shù)組。(默認為None)
  • input_shapes:表示輸入張量名稱的字符串的Dict到表示輸入shape的整數(shù)列表(例如,{"foo" : [1, 16, 16, 3]})。輸入shape為None時自動確定(例如,{"foo" : None})。(默認為None)。
  • output_arrays:用于凍結(jié)圖形的輸出張量列表。當沒有提供時,使用來自SignatureDef的輸出數(shù)組。(默認為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創(chuàng)建TFLiteConverter類。

參數(shù):

  • saved_model_dir:要轉(zhuǎn)換的SavedModel目錄。
  • input_arrays:用于凍結(jié)圖形的輸入張量列表。當沒有提供時,使用來自SignatureDef的輸入數(shù)組。(默認為None)
  • input_shapes:表示輸入張量名稱的字符串的Dict到表示輸入shape的整數(shù)列表(例如,{"foo" : [1, 16, 16, 3]})。輸入shape為None時自動確定(例如,{"foo" : None})。(默認為None)。
  • output_arrays:用于凍結(jié)圖形的輸出張量列表。當沒有提供時,使用來自SignatureDef的輸出數(shù)組。(默認為None)
  • tag_set:標識要在SavedModel中進行分析的MetaGraphDef的標記集。標簽集中的所有標簽都必須存在。(默認設(shè)置("serve"))
  • signature_key:標識包含輸入和輸出的SignatureDef的關(guān)??鍵字。(默認為DEFAULT_SERVING_SIGNATURE_DEF_KEY)

返回:

TFLiteConverter類。

from_session

@classmethod
from_session(
    cls,
    sess,
    input_tensors,
    output_tensors
)

從TensorFlow會話創(chuàng)建TFLiteConverter類。

參數(shù):

  • sess:TensorFlow會話。
  • input_tensors:輸入張量列表。使用foo.get_shape()和foo.dtype計算類型和shape。
  • output_tensors:輸出張量列表(僅使用.name)。

返回:

TFLiteConverter類。

get_input_arrays

get_input_arrays()

返回輸入張量的名稱列表。

返回:

字符串列表。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號