Path: blob/master/site/ja/lite/performance/post_training_quant.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
トレーニング後のダイナミックレンジ量子化
概要
TensorFlow Lite では、TensorFlow グラフ定義から TensorFlow Lite フラットバッファ形式へのモデル変換の一部として、重みを 8 ビット精度に変換できるようになりました。ダイナミックレンジ量子化は、モデルサイズを 4 分の 1 に削減します。さらに、TFLite は、アクティベーションのオンザフライの量子化および逆量子化をサポートし、以下を可能にします。
可能な場合、より高速な実装のために量子化されたカーネルを使用する。
グラフの異なる部分に浮動小数点カーネルと量子化カーネルを使用する。
アクティベーションは常に浮動小数点で保存されます。量子化カーネルをサポートする演算の場合、アクティベーションは処理の前に動的に 8 ビットの精度に量子化され、処理後に浮動小数点精度に逆量子化されます。変換されるモデルによって異なりますが、純粋な浮動小数点の計算より高速になる可能性があります。
量子化認識トレーニングとは対照的に、この方法では、重みはトレーニング後に量子化され、アクティベーションは推論時に動的に量子化されます。したがって、モデルの重みは再量子化されず、量子化による誤差が補正されません。量子化モデルの精度をチェックして、精度低下が許容範囲内であることを確認することが重要です。
このチュートリアルでは、MNIST モデルを新規にトレーニングし、TensorFlow でその精度を確認してから、モデルをダイナミックレンジ量子化を使用した Tensorflow Lite フラットバッファに変換します。最後に、変換されたモデルの精度を確認し、元の float モデルと比較します。
MNIST モデルの構築
セットアップ
TensorFlow モデルのトレーニング
この例では、モデルを 1 エポックでトレーニングしたので、トレーニングの精度は 96% 以下になります。
TensorFlow Lite モデルに変換する
TensorFlow Lite Converter を使用して、トレーニング済みモデルを TensorFlow Lite モデルに変換できるようになりました。
次に、TFLiteConverter
を使用してモデルを読み込みます。
tflite ファイルに書き込みます。
エクスポート時にモデルを量子化するには、optimizations
フラグを設定してサイズを最適化します。
生成されるファイルのサイズが約1/4
であることに注意してください。
TFLite モデルを実行する
Python TensorFlow Lite インタープリタを使用して TensorFlow Lite モデルを実行します。
モデルをインタープリタに読み込む
1 つの画像でモデルをテストする
モデルを評価する
ダイナミックレンジ量子化モデルの評価を繰り返して、以下を取得する
この例では、圧縮されたモデルの精度は同じです。
既存のモデルの最適化
事前アクティべーレイヤーを備えた Resnet (Resnet-v2) は、ビジョンアプリケーションで広く使用されています。resnet-v2-101 の事前トレーニング済み凍結グラフは、Tensorflow Hub で入手できます。
次の方法で、量子化された凍結グラフを TensorFLow Lite フラットバッファに変換できます。
モデルサイズが 171 MB から 43 MB に削減されます。imagenet でのこのモデルの精度は、TFLite 精度測定用に提供されているスクリプトを使用して評価できます。
最適化されたモデルの top-1 精度は、浮動小数点のモデルと同じく 76.8 です。