Path: blob/master/site/ja/model_optimization/guide/clustering/clustering_example.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Keras での重みクラスタリングの例
概要
TensorFlow Model Optimization ツールキットの一部である重みクラスタリングのエンドツーエンドの例へようこそ。
その他のページ
重みクラスタリングの紹介、およびクラスタリングを使用すべきかどうかの判定(サポート情報も含む)については、概要ページをご覧ください。
ユースケースに合った API を素早く特定するには(16 個のクラスタでモデルを完全クラスタ化するケースを超える内容)、総合ガイドをご覧ください。
内容
チュートリアルでは、次について説明しています。
MNIST データセットの
tf.keras
モデルを最初からトレーニングする重みクラスタリング API を適用してモデルを微調整し、精度を確認する
クラスタリングによって 6 倍小さな TF および TFLite モデルを作成する
重みクラスタリングとポストトレーニング量子化を組み合わせて、8 倍小さな TFLite モデルを作成する
TF から TFLite への精度の永続性を確認する
セットアップ
この Jupyter ノートブックは、ローカルの virtualenv または Colab で実行できます。依存関係のセットアップに関する詳細は、インストールガイドをご覧ください。
クラスタを使用せずに、MNIST の tf.keras モデルをトレーニングする
ベースラインモデルを評価して後で使用できるように保存する
クラスタを使ってトレーニング済みのモデルを微調整する
cluster_weights()
API をトレーニング済みのモデル全体に適用し、十分な精度を維持しながら zip 適用後のモデル縮小の効果を実演します。ユースケースに応じた精度と圧縮率のバランスについては、総合ガイドのレイヤー別の例をご覧ください。
モデルを定義してクラスタリング API を適用する
クラスタリング API にモデルを渡す前に、必ずトレーニングを実行し、許容できる精度が備わっていることを確認してください。
モデルを微調整し、ベースラインに対する精度を評価する
1 エポック、クラスタでモデルを微調整します。
この例では、ベースラインと比較し、クラスタリング後のテスト精度に最小限の損失があります。
クラスタリングによって 6 倍小さなモデルを作成する
strip_clustering
と標準圧縮アルゴリズム(gzip など)の適用は、クラスタリングの圧縮のメリットを確認する上で必要です。
まず、TensorFlow の圧縮可能なモデルを作成します。ここで、strip_clustering
は、クラスタリングがトレーニング中にのみ必要とするすべての変数(クラスタの重心とインデックスを格納する tf.Variable
など)を除去します。そうしない場合、推論中にモデルサイズが増加してしまいます。
次に、TFLite の圧縮可能なモデルを作成します。クラスタモデルをターゲットバックエンドで実行可能な形式に変換できます。TensorFlow Lite は、モバイルデバイスにデプロイするために使用できる例です。
実際に gzip でモデルを圧縮し、zip 圧縮されたサイズを測定するヘルパー関数を定義します。
比較して、モデルがクラスタリングによって 6 倍小さくなっていることを確認します。
重みクラスタリングとポストトレーニング量子化を組み合わせて、8 倍小さな TFLite モデルを作成する
さらにメリットを得るために、ポストトレーニング量子化をクラスタモデルに適用できます。
TF から TFLite への精度の永続性を確認する
テストデータセットで TFLite モデルを評価するヘルパー関数を定義します。
クラスタ化および量子化されたモデルを評価し、TensorFlow の精度が TFLite バックエンドに持続することを確認します。
まとめ
このチュートリアルでは、TensorFlow Model Optimization Toolkit API を使用してクラスタモデルを作成する方法を確認しました。より具体的には、精度の違いを最小限に抑えて MNIST の 8 倍の小さいモデルを作成する、エンドツーエンドの例を確認しました。この新しい機能を試すことをお勧めします。これは、リソースに制約のある環境でのデプロイに特に重要な機能です。