このページは Cloud Translation API によって翻訳されました。
Switch to English

tf.saved_model.save

TensorFlow 1つのバージョン GitHubの上のソースを表示

輸出追跡可能なオブジェクトobjSavedModel形式

ノートPCで使用されます

ガイドで使用チュートリアルで使用されます

使用例:

 class Adder(tf.Module):

  @tf.function(input_signature=[tf.TensorSpec(shape=None, dtype=tf.float32)])
  def add(self, x):
    return x + x + 1.

to_export = Adder()
tf.saved_model.save(to_export, '/tmp/adder')
 

得SavedModel、その値は、任意の形状とDTYPEのfloat32を有する、「X」という名前の入力と、次にサービス提供可能です。

オプションのsignaturesのメソッド引数コントロールobj消費するプログラムに利用できるようになりSavedModel APIをサービング、たとえば、秒。 Pythonの機能が飾られてもよい@tf.function(input_signature=...)とへの呼び出しを直接、又は遅延しシグネチャとして渡さget_concrete_functionで装飾方法に@tf.function

場合はsignatures引数が省略され、 obj検索されます@tf.functionメソッドを-decorated。正確に一つの場合@tf.function発見され、その方法はSavedModelのデフォルト署名として使用されます。この動作は、対応する際に、将来的に変更することが予想されるtf.saved_model.loadシンボルが追加されます。その時点で、署名は完全に任意であろう、任意@tf.functionに取り付けobjまたはその依存関係は、で使用するためにエクスポートされるload

エクスポートSavedModelに署名を呼び出すとき、 Tensor引数は名前で識別されます。これらの名前は、デフォルトでPythonの関数の引数名から来ます。彼らは、指定することで上書きすることができるname=...引数に対応するにtf.TensorSpecオブジェクト。複数の場合は、明示的な名前付けが必要とされるTensor sがPythonの関数への単一の引数を通過しています。

使用される関数の出力signaturesいずれの場合も出力が番号付けされたフラットリスト、または辞書にマッピング文字列キーでなければならないTensorキー名出力に使用される場合には、。

署名はで返されたオブジェクトで使用可能なtf.saved_model.loadとして.signatures属性。これは、予約済みの属性です: tf.saved_model.saveカスタムを持つオブジェクトの.signatures属性は、例外が発生します。

以来tf.keras.Modelオブジェクトも追跡可能です、この機能はKerasモデルをエクスポートするために使用することができます。例えば、指定された署名とエクスポート:

 class Model(tf.keras.Model):

  @tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.string)])
  def serve(self, serialized):
    ...

m = Model()
tf.saved_model.save(m, '/tmp/saved_model/')
 

固定された署名なし関数からのエクスポート:

 class Model(tf.keras.Model):

  @tf.function
  def call(self, x):
    ...

m = Model()
tf.saved_model.save(
    m, '/tmp/saved_model/',
    signatures=m.call.get_concrete_function(
        tf.TensorSpec(shape=[None, 3], dtype=tf.float32, name="inp")))
 

tf.keras.Model入力と出力から構築インスタンスがすでに署名を持っているので、必要としない@tf.functionデコレータやsignatures引数を。どちらも指定されていない場合は、モデルのフォワード・パスがエクスポートされます。

 x = input_layer.Input((4,), name="x")
y = core.Dense(5, name="out")(x)
model = training.Model(x, y)
tf.saved_model.save(model, '/tmp/saved_model/')
# The exported SavedModel takes "x" with shape [None, 4] and returns "out"
# with shape [None, 5]
 

変数は、追跡対象の属性またはの属性に割り当てることにより、追跡しなければならないobj直接的。 TensorFlowオブジェクト(から例えば層tf.keras.layers 、からオプティマイザtf.train )自動的に変数を追跡します。これは、同じ追跡スキームつまりtf.train.Checkpoint用途、およびエクスポートされたCheckpointオブジェクトは、ポイントすることによって、トレーニングチェックポイントとして復元することができるtf.train.Checkpoint.restore SavedModelの「変数/」サブディレクトリに。現在、変数のみステートフルオブジェクトはによってサポートされているtf.saved_model.saveが、他の(例えばテーブル)は、将来的にサポートされます。

tf.function代わりに呼び出しコンテキストのデバイスを使用するのでは、関数本体の外側からではなく、ハードコードデバイス注釈を行います。例えば、この手段は、モデルをエクスポートすることはGPU上で動作し、CPUにそれを提供するが、一般的にいくつかの例外を除いて、動作することをことを。 tf.deviceエクスポートされたモデルにハード符号化される関数の体内注釈。注釈のこのタイプはお勧めしません。名前やデバイス固有のレイアウトで「cuDNN」とデバイス固有の操作、例えば、問題が発生することがあります。現在DistributionStrategy別の例外です:アクティブな流通戦略は、デバイスの配置は、機能にハードコーディングされたことになります。下単一デバイス演算及びインポートをエクスポートDistributionStrategy現在サポートされていないが、将来的であってもよいです。

でエクスポートSavedModels tf.saved_model.save ストリップデフォルト値属性 SavedModelの消費者が生産者よりも古いTensorFlowバージョンを実行しているとき、非互換性のあるソースを削除し、自動的に、。そのようなエクスポートされたモデルは、消費者がの定義を持っていない操作が含まれているときのように、自動的に処理されていない非互換性のしかし、他の情報源があります。

単一tf.functionは多くのConcreteFunctionsを生成することができます。下流のツールを使用すると、使用することができ、単一のtf.functionによって生成されたすべての具体的な機能を参照したい場合function_aliasesすべての具体的な関数名にエイリアス名からマップを保存するために、引数を。例えば

 class MyModel:
@tf.function
def func():
  ...

@tf.function
def serve():
  ...
  func()

model = MyModel()
signatures = {
    'serving_default': model.serve.get_concrete_function(),
}
options = tf.saved_model.SaveOptions(function_aliases={
    'my_func': func,
})
tf.saved_model.save(model, export_dir, signatures, options)
 

obj 追跡可能なオブジェクトをエクスポートします。
export_dir SavedModelを書き込むディレクトリ。
signatures オプションのいずれかtf.function指定された入力シグネチャまたは結果にf.get_concrete_function@tf.function -decorated関数fケースここで、 f署名鍵を配信デフォルト下SavedModelの署名を生成するために使用されます。 signatures 、それがいずれかに署名鍵からマッピングする場合には辞書であってもよいtf.function入力シグネチャまたはコンクリートの機能を持つインスタンス。そのようなA辞書のキーは任意の文字列であってもよいが、典型的であろうtf.saved_model.signature_constantsモジュール。
options オプションは、 tf.saved_model.SaveOptions保存することを指定するオプションオブジェクト。

ValueError もしobj追跡可能ではありません。

イーガーの互換性

グラフを構築する際にもサポートされていません。 TensorFlow 1.xから、 tf.compat.v1.enable_eager_execution()最初に実行する必要があります。 TensorFlow 1.xからグラフの建物は、デフォルトのグラフに保存操作各反復を新たに追加するとき、ループ内でtf.saved_model.saveを呼び出します。

関数の本体内から呼び出すことはできません。