量子化 API
def quantize(
input_frozen_graph = "",
input_nodes = "",
input_shapes = "",
output_nodes = "",
input_fn = "",
method = 1,
calib_iter = 100,
output_dir = "./quantize_results",
**kargs)
この関数は WeGO TensorFlow r1.15 で
vai_q_tensorflow
コマンド ツールを呼び出し、入力浮動小数点モデルを DPU で高速運用が可能な固定小数点モデルに変換します。ネイティブな vai_q_tensorflow
クオンタイザーとの完全な互換性のために、この API から受け取ったすべてのパラメーターは vai_q_tensorflow
コマンド ツールに直接渡されます。この関数は、量子化された GraphDef
オブジェクトを返すか、エラー時には None
を返します。 注記: 現在、WeGO でのオンザフライ量子化でサポートされるのは PTQ のみです。高速微調整および QAT 量子化の詳細は、vai_q_tensorflow 量子化認識トレーニング を参照してください。
パラメーター
- input_frozen_graph
- 文字列。凍結された入力グラフ (.pb) のパス (デフォルト:)
- input_nodes
- 文字列: 量子化するサブグラフの入力ノードの名前リスト (カンマ区切り)。output_nodes と組み合わせて使用します。運用モデルを生成する際は、input_nodes と output_nodes 間のサブグラフのみが含まれます。前処理および拡張後のノードなど、量子化するモデル本体の先頭に設定してください。(デフォルト: )
- input_shapes
- 文字列。input_nodes の形状リスト (カンマ区切り)。形状は、
1,224,224,3
のように各ノードの 4 次元形状 (カンマ区切り) とする必要があります。?,224,224,3
など、バッチ サイズの不明なサイズがサポートされます。input_nodes が複数ある場合は、?,224,224,3:?,300,300,1
のように各ノードの形状リストを:
で区切って割り当ててください (デフォルト: )。 - output_nodes
- 文字列: 量子化するサブグラフの出力ノードの名前リスト (カンマ区切り)。input_nodes と組み合わせて使用します。運用モデルを生成する際は、input_nodes と output_nodes 間のサブグラフのみが含まれます。後処理前のノードなど、量子化するモデル本体の末尾に設定してください。(デフォルト: )
- input_fn
- 文字列: 入力データを供給するインポート可能な Python 関数。形式は
module_name.input_fn_name
です (例:my_input_fn.input_fn
)。input_fn
は、キャリブレーション ステップを示す入力としてint
オブジェクトを使用し、各呼び出しに対して dict (placeholder_node_name : numpy.Array
) オブジェクトを返します。このオブジェクトは、モデルのプレースホルダー ノードに入力されます。(デフォルト: ) - method
- int32: {0,1,2}。デフォルト: 1。量子化の方法。オプション:
- 0: オーバーフローなし。量子化中に値が飽和しないように注意してください。その場合、結果が不正確になります。
- 1: 最小差分法。量子化中に大きな値の飽和を認めることにより、量子化誤差を抑えます。0 を指定した場合よりも低速ですが、外れ値の影響は受けにくくなります。
- 2: min-diffs 法 (Depthwise ストラテジ)。量子化中に大きな値の飽和を認めることにより、量子化誤差を抑えます。Depthwise 重みには特別なストラテジを適用しますが、標準的な重みとアクティベーションには方法 1 を適用します。0 を指定した場合よりも低速ですが、外れ値の影響は受けにくくなります。
- calib_iter
- int32。キャリブレーションの反復。キャリブレーション用イメージの総数 = calib_iter * batch_size (デフォルト: 100)
- output_dir
- 文字列。量子化の結果を保存するディレクトリ (デフォルト: ./quantize_results)。
注記: WeGO TensorFlow 1.x のオンザフライ量子化の詳しい例は、サンプルを参照してください。