web-dev-qa-db-ja.com

TensorFlowユーザーはCheckpointやGraphDefよりSavedModelを好むべきですか?

SavedModel Docs から、

SavedModel、TensorFlowモデルのユニバーサルシリアル化形式。

そして

SavedModelはTensorFlow Saverをラップします。セーバーは、主に変数チェックポイントを生成するために使用されます。

私の理解では、誰かがTensorFlow Servingを使用したい場合、SavedModelは必須です。ただし、TensorflowモデルをSavedModelなしでサービスサーバーに展開できます。グラフをフリーズしてGraphDefとしてエクスポートし、ReadBinaryProtoおよび C++でCreate またはGoで Import .

SavedModelの目的は何ですか?モデルに関連するデータをさらに集約するために、ユーザーはCheckpointやGraphDefよりもSavedModelを好むべきですか?

30
Byoungchan Lee

チェックポイントには、TensorFlowモデルの(一部の)変数の値が含まれます。 Saver で作成され、保存する特定のVariablesが指定されるか、デフォルトですべての(非ローカル)変数が保存されます。

チェックポイントを使用するには、互換性のあるTensorFlow Graphが必要です。そのVariablesは、チェックポイントのVariablesと同じ名前です。 (互換性のあるGraphがない場合でも、チェックポイントに保存されている値を、選択したVariablesに init_from_checkpoint ユーティリティを使用してロードできます。寄与。)

SavedModel はより包括的です:Graphsのセットを含みます( MetaGraph s、実際にはコレクションを保存しますなど)、およびこれらのGraphsと互換性があるはずのチェックポイント、およびモデルを実行するために必要なすべてのアセットファイル(語彙ファイルなど)。含まれる各MetaGraphには、署名のセットも格納されます。署名は、(名前付きの)入力および出力テンソルを定義します。

つまり、SavedModelのみを指定すると、内部のグラフを解釈または実行するツール(tensorflow/serving、またはsaved_modelに表示される新しいtools/コマンドラインユーティリティなど)を作成できます。 。提供する必要があるのはデータのみです。

疑わしい場合は、チェックポイントだけでなく、常にSavedModelの書き込み側でエラーが発生します。これにより、テンソルフロー/サービング(および数が増えるその他のきちんとしたユーティリティ)を使用できるようになるだけでなく、モデルの実行に必要なすべての情報を確実に取得できます。モデルを変更し、チェックポイントファイルとの互換性がなくなったため、使用できないチェックポイントほどイライラするものはありません。比較するために予測を実行するだけです。

44
wicke