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

Migracja z TF1 do TF2 za pomocą TensorFlow Hub

Na tej stronie wyjaśniono, jak nadal używać TensorFlow Hub podczas migracji kodu TensorFlow z TensorFlow 1 do TensorFlow 2. Stanowi uzupełnienie ogólnego przewodnika migracji TensorFlow.

W przypadku TF2, TF Hub odszedł od starszego hub.Module API do budowania tf.compat.v1.Graph tak jak tf.contrib.v1.layers to tf.contrib.v1.layers . Zamiast tego jest teraz hub.KerasLayer do użycia wraz z innymi warstwami Keras do budowania tf.keras.Model (zazwyczaj w nowym, chętnym środowisku wykonawczym TF2) i jego podstawową hub.load() dla niskopoziomowego kodu TensorFlow.

hub.Module API hub.Module pozostaje dostępny w bibliotece tensorflow_hub do użytku w TF1 oraz w trybie zgodności z TF1 TF2. Może ładować tylko modele w formacie TF1 Hub .

Nowe API hub.load() i hub.KerasLayer działa dla TensorFlow 1.15 (w trybie eager i Graph) oraz w TensorFlow 2. To nowe API może ładować nowe zasoby TF2 SavedModel i, z ograniczeniami określonymi w modelu przewodnik zgodności , starsze modele w formacie TF1 Hub.

Ogólnie zaleca się używanie nowego interfejsu API, gdy tylko jest to możliwe.

Podsumowanie nowego interfejsu API

hub.load() to nowa niskopoziomowa funkcja do ładowania SavedModel z TensorFlow Hub (lub kompatybilnych usług). tf.saved_model.load() TF2; Przewodnik SavedModel TensorFlow opisuje, co można zrobić z wynikiem.

 m = hub.load(handle)
outputs = m(inputs)
 

Klasa hub.KerasLayer wywołuje hub.load() i dostosowuje wynik do użycia w Keras wraz z innymi warstwami Keras. (Może to być nawet wygodne opakowanie dla załadowanych SavedModels używanych w inny sposób).

 model = tf.keras.Sequential([
    hub.KerasLayer(handle),
    ...])
 

Wiele samouczków pokazuje te interfejsy API w akcji. Zobacz w szczególności

Korzystanie z nowego interfejsu API w szkoleniu z estymatora

Jeśli używasz TF2 SavedModel w estymatorze do uczenia z serwerami parametrów (lub w inny sposób w sesji TF1 ze zmiennymi umieszczonymi na urządzeniach zdalnych), musisz ustawić experimental.share_cluster_devices_in_session w programie ConfigProto tf.Session, w przeciwnym razie pojawi się błąd na przykład „Przypisane urządzenie” / zadanie: ps / replica: 0 / zadanie: 0 / urządzenie: CPU: 0 'nie pasuje do żadnego urządzenia. "

Niezbędną opcję można ustawić np

 session_config = tf.compat.v1.ConfigProto()
session_config.experimental.share_cluster_devices_in_session = True
run_config = tf.estimator.RunConfig(..., session_config=session_config)
estimator = tf.estimator.Estimator(..., config=run_config)
 

Począwszy od TF2.2 ta opcja nie jest już eksperymentalna, a element .experimental można upuścić.

Ładowanie starszych modeli w formacie TF1 Hub

Może się zdarzyć, że nowy zapisany model TF2 nie jest jeszcze dostępny dla twojego przypadku użycia i musisz załadować starszy model w formacie TF1 Hub. Począwszy od wersji 0.7 tensorflow_hub , można używać starszego modelu w formacie TF1 Hub razem z hub.KerasLayer jak pokazano poniżej:

 m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)
 

Dodatkowo KerasLayer udostępnia możliwość określenia tags , signature , output_key i signature_outputs_as_dict dla bardziej szczegółowych zastosowań starszych modeli w formacie TF1 Hub i starszych modeli SavedModels.

Więcej informacji na temat zgodności formatu TF1 Hub można znaleźć w przewodniku po zgodności modeli .

Korzystanie z interfejsów API niższego poziomu

Starsze modele w formacie koncentratora TF1 można ładować za pośrednictwem tf.saved_model.load . Zamiast

 # DEPRECATED: TensorFlow 1
m = hub.Module(handle, tags={"foo", "bar"})
tensors_out_dict = m(dict(x1=..., x2=...), signature="sig", as_dict=True)
 

zaleca się stosowanie:

 # TensorFlow 2
m = hub.load(path, tags={"foo", "bar"})
tensors_out_dict = m.signatures["sig"](x1=..., x2=...)
 

W tych przykładach m.signatures jest wyrazem konkretnych funkcji TensorFlow, które są kluczowane nazwami sygnatur. Wywołanie takiej funkcji oblicza wszystkie jej wyniki, nawet jeśli nie są używane. (Różni się to od leniwej oceny trybu wykresu TF1.)