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