Path: blob/master/site/ja/model_optimization/guide/combine/pqat_example.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
Keras でのプルーニングを保持する量子化認識トレーニング(PQAT)の例
概要
このチュートリアルでは、TensorFlow モデル最適化ツールキットの協調最適化パイプラインの一部であるプルーニングを保持する量子化認識トレーニング (PQAT) API の使用法を実演します。
その他のページ
パイプラインの概要とその他の利用可能な手法については、協調最適化の概要ページを参照してください。
内容
チュートリアルでは、次について説明しています。
MNIST データセットの
tf.keras
モデルを最初からトレーニングする。スパース性 API を適用してモデルをプルーニングで微調整し、精度を確認する。
QAT を適用し、スパース性の損失を観察します。
PQAT を適用し、前に適用されたスパース性が保持されていることを確認する。
TFLite モデルを生成し、それに PQAT を適用した場合の影響を観察する。
達成した PQAT モデルの精度を、ポストトレーニング量子化を使用して量子化されたモデルと比較する。
セットアップ
この Jupyter ノートブックは、ローカルの virtualenv または Colab で実行できます。依存関係のセットアップに関する詳細は、インストールガイドをご覧ください。
プルーニングを使用せずに、MNIST の tf.keras モデルをトレーニングする
ベースラインモデルを評価して後で使用できるように保存する
モデルをプルーニングし、50% のスパース性に微調整する
prune_low_magnitude()
API を適用して、事前にトレーニングされたモデル全体をプルーニングします。zip を適用し、モデルサイズを縮小する際に精度が効果的に維持されることを観察してください。API を使用して、モデルの精度を維持しながら最高の圧縮率を達成するための最適な方法については、プルーニング総合ガイドを参照してください。
モデルを定義してスパース性 API を適用する
スパース性 API を使用する前に、モデルを事前にトレーニングする必要があります。
モデルを微調整し、ベースラインに対する精度を評価する
3 エポックのプルーニングでモデルを微調整します。
モデルのスパース性を計算して出力するヘルパー関数を定義します。
モデルが正しくプルーニングされていることを確認します。最初にプルーニングラッパーを削除する必要があります。
この例では、ベースラインと比較し、プルーニング後のテスト精度に最小限の損失があります。
QAT と PQAT を適用し、モデルクラスタへの影響を確認する
次に、プルーニングされたモデルに QAT とプルーニングを保持する QAT(PQAT)の両方を適用し、PQAT がプルーニングされたモデルのスパース性を保持することを確認します。PQAT API を適用する前に、tfmot.sparsity.keras.strip_pruning
を使用してモデルからプルーニングのラッパーを削除したことに注意してください。
PQAT モデルの圧縮のメリットを確認する
zip 形式のモデルファイルを取得するためのヘルパー関数を定義します。
これは小規模なモデルなので、2 つのモデルの違いはあまり目立ちません。より大きな本番モデルにプルーニングと PQAT を適用すると、より大きな圧縮が得られます。
TF から TFLite への精度の永続性を確認する
テストデータセットで TFLite モデルを評価するヘルパー関数を定義します。
プルーニングおよび量子化されたモデルを評価し、TensorFlow の精度が TFLite バックエンドに持続することを確認します。
ポストトレーニング量子化を適用し、PQAT モデルと比較する
次に、プルーニングされたモデルで通常のポストトレーニング量子化(微調整なし)を使用し、PQAT モデルと比較した精度を確認します。量子化モデルの精度を向上させるために PQAT を使用する必要がある理由がお分かりになると思います。
まず、最初の 1000 個のトレーニング画像からキャリブレーションデータセットのジェネレータを定義します。
モデルを量子化し、以前に取得した CPAT モデルと精度を比較します。微調整で量子化されたモデルは、より高い精度を実現することに注目してください。
結論
このチュートリアルでは、モデルを作成し、スパース性 API を使用してプルーニングし、スパース性を保持する量子化認識トレーニング(PQAT)を適用して、QAT を使用する際にスパース性を保持する方法を学習しました。最終的な PQAT モデルを QAT モデルと比較し、スパース性が前者で保持され、後者で失われることを示しました。続いて、モデルを TFLite に変換して、連鎖クラスタリングと PQAT モデル最適化手法の圧縮の利点を示し、TFLite モデルを評価して、TFLite バックエンドで精度が維持されることを確認しました。最後に、PQAT モデルを、ポストトレーニング量子化 API を使用したプルーニングされた量子化モデルと比較し、PQAT を使用すると通常の量子化よりも精度の低下を抑えられることを示しました。