SavedModel Docs から、
SavedModel、TensorFlowモデルのユニバーサルシリアル化形式。
そして
SavedModelはTensorFlow Saverをラップします。セーバーは、主に変数チェックポイントを生成するために使用されます。
私の理解では、誰かがTensorFlow Servingを使用したい場合、SavedModel
は必須です。ただし、TensorflowモデルをSavedModel
なしでサービスサーバーに展開できます。グラフをフリーズしてGraphDef
としてエクスポートし、ReadBinaryProto
および C++でCreate またはGoで Import .
SavedModelの目的は何ですか?モデルに関連するデータをさらに集約するために、ユーザーはCheckpointやGraphDefよりもSavedModelを好むべきですか?
チェックポイントには、TensorFlowモデルの(一部の)変数の値が含まれます。 Saver
で作成され、保存する特定のVariable
sが指定されるか、デフォルトですべての(非ローカル)変数が保存されます。
チェックポイントを使用するには、互換性のあるTensorFlow Graph
が必要です。そのVariable
sは、チェックポイントのVariable
sと同じ名前です。 (互換性のあるGraph
がない場合でも、チェックポイントに保存されている値を、選択したVariable
sに init_from_checkpoint
ユーティリティを使用してロードできます。寄与。)
SavedModel
はより包括的です:Graph
sのセットを含みます( MetaGraph
s、実際にはコレクションを保存しますなど)、およびこれらのGraph
sと互換性があるはずのチェックポイント、およびモデルを実行するために必要なすべてのアセットファイル(語彙ファイルなど)。含まれる各MetaGraph
には、署名のセットも格納されます。署名は、(名前付きの)入力および出力テンソルを定義します。
つまり、SavedModelのみを指定すると、内部のグラフを解釈または実行するツール(tensorflow/serving
、またはsaved_model
に表示される新しいtools/
コマンドラインユーティリティなど)を作成できます。 。提供する必要があるのはデータのみです。
疑わしい場合は、チェックポイントだけでなく、常にSavedModel
の書き込み側でエラーが発生します。これにより、テンソルフロー/サービング(および数が増えるその他のきちんとしたユーティリティ)を使用できるようになるだけでなく、モデルの実行に必要なすべての情報を確実に取得できます。モデルを変更し、チェックポイントファイルとの互換性がなくなったため、使用できないチェックポイントほどイライラするものはありません。比較するために予測を実行するだけです。