Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

tf.saved_model.save

TensorFlow 1 wersja Zobacz źródło na GitHub

Eksportuje śledzenia obiektu obj do formatu SavedModel .

Stosowany w notebookach

Używany w przewodniku Używany w samouczków

Przykładowe zastosowania:

 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')
 

Otrzymany SavedModel następnie servable z wejściem o nazwie „X”, wartość o dowolnym kształcie i dtype float32.

Opcjonalne signatures kontrole argument metody obj będą dostępne do programów, które zużywają SavedModel s, na przykład, obsługujących API. Python funkcje mogą być ozdobione @tf.function(input_signature=...) i przekazywane jako podpisów bezpośrednio lub leniwie z wezwaniem do get_concrete_function sprawie sposobu ozdobione @tf.function .

Jeżeli signatures argument zostanie pominięty, obj będą wyszukiwane @tf.function -decorated metod. Jeśli dokładnie jeden @tf.function zostanie znaleziony, że metoda będzie używany jako domyślny podpis na SavedModel. Oczekuje się, że zachowanie to zmienić w przyszłości, gdy odpowiadający tf.saved_model.load symbol dodaje. W tym momencie podpisy będą całkowicie opcjonalne, a wszelkie @tf.function dołączone do obj lub jego zależności zostaną wyeksportowane do użytku z load .

Podczas wywoływania podpis w eksportowanym SavedModel, Tensor argumenty są identyfikowane przez nazwę. Nazwy te pochodzą od nazw argumentu funkcja Pythona domyślnie. Mogą one być zastąpione przez podanie name=... argumentów w odpowiednim tf.TensorSpec obiektu. Wyraźne nazewnictwo jest wymagane, jeśli wielu Tensor s przekazywane są za pomocą jednego argumentu do funkcji Pythona.

Wyjścia funkcji stosowane jako signatures muszą być albo płaskie list, w którym sprawa będzie wyjścia numerowane lub słownika mapowanie klawiszy sznurek do Tensor , w którym to przypadku klawisze będą wykorzystywane do nazwy wyjść.

Podpisy są dostępne w obiektach zwracanych przez tf.saved_model.load jako .signatures atrybutu. To jest zarezerwowanym atrybut: tf.saved_model.save na obiekcie z niestandardowych .signatures atrybutu rzuci wyjątek.

Od tf.keras.Model obiekty są również śledzenia, funkcja ta może być używany do eksportowania modeli Keras. Na przykład, eksport z podpisem określone:

 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/')
 

Eksportu z funkcji bez stałej podpisem:

 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 przypadki skonstruowane z wejściami i wyjściami już podpis i tak nie wymagają @tf.function dekorator lub signatures argument. Jeśli nie podano, w przód zdać modelu jest eksportowana.

 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]
 

Zmienne muszą być śledzone poprzez przypisanie ich do atrybutu śledzonego obiektu lub atrybutu obj bezpośrednio. Przedmioty TensorFlow (np warstwy od tf.keras.layers , optymalizujące z tf.train ) automatyczne śledzenie ich zmienne. Jest to ten sam system śledzenia, że tf.train.Checkpoint wykorzystuje i wyeksportowany Checkpoint obiekt może zostać przywrócony jako punkt kontrolny szkolenia wskazując tf.train.Checkpoint.restore do zmiennych „/” podkatalogu SavedModel użytkownika. Obecnie, zmienne są tylko stanowe obiektów obsługiwanych przez tf.saved_model.save , ale inni (np tabele) będą wspierane w przyszłości.

tf.function robi adnotacje urządzenie nie trudno kod spoza ciała funkcji, zamiast korzystania z urządzenia dzwoniącego kontekstowego. Oznacza to na przykład, że eksportuje model, który działa na GPU i obsługujących go na CPU generalnie będzie działał, z pewnymi wyjątkami. tf.device adnotacje wewnątrz ciała funkcji będą zakodowane w eksportowanym modelu; Ten typ adnotacji jest odradzane. operacje specyficzne dla urządzenia, np „cuDNN” w nazwie lub z urządzeniem specyficznych układów, mogą powodować problemy. Obecnie DistributionStrategy inny wyjątek: strategii aktywnej dystrybucji spowoduje docelowe urządzenie może być zakodowany w funkcji. Eksportowania obliczeń pojedynczego urządzenia i importowanie pod DistributionStrategy nie jest obecnie obsługiwany, ale może być w przyszłości.

SavedModels wywożone z tf.saved_model.save striptizem domyślnymi wartościami atrybutów automatycznie, co usuwa jedno źródło niezgodności gdy konsument z SavedModel pracuje starszą wersję TensorFlow niż producenta. Istnieją jednak inne źródła niezgodności, które nie są obsługiwane automatycznie, takie jak, kiedy eksportowane model zawiera operacje, które konsument nie posiada definicje.

Pojedyncza tf.function może generować wiele ConcreteFunctions. Jeżeli dalszy narzędzie chce odnieść się do wszystkich funkcji konkretnych generowanych przez pojedynczego tf.function można użyć function_aliases argumentu do przechowywania map z aliasem do wszystkich nazw funkcji beton. Na przykład

 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 Śledzenia obiektu na eksport.
export_dir Katalog, w którym napisać SavedModel.
signatures Opcjonalnie, albo tf.function podpisem wejściowego określony lub na skutek f.get_concrete_function na @tf.function -decorated funkcji f , w którym to przypadku f będzie używany do generowania podpisu dla SavedModel pod domyślnie obsługujących klucz podpisu , signatures mogą być również słownik, w którym to przypadku odwzorowuje to z kluczy do podpisu albo tf.function przypadkach z podpisami wejściowych lub funkcji betonowych. Klucze takiego słownika mogą być dowolne ciągi znaków, ale zazwyczaj będzie od tf.saved_model.signature_constants modułu.
options Opcjonalnie, tf.saved_model.SaveOptions obiekt, który określa możliwości zapisywania.

ValueError Jeśli obj nie jest śledzenia.

Zgodność chętny

Nie jest dobrze obsługiwany podczas budowania wykresu. Od TensorFlow 1.x, tf.compat.v1.enable_eager_execution() należy uruchamiać jako pierwszy. Wywołanie tf.saved_model.save w pętli, gdy budynek wykres z TensorFlow 1.x doda nowy operacji składowania do domyślnego wykresu każdej iteracji.

nie mogą być wywoływane z wewnątrz ciała funkcji.