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

Format TF1 Hub

Na swojej premiery w 2018 roku, TensorFlow Hub oferowany jeden rodzaj aktywów: Format TF1 Hub do przywozu do TensorFlow 1 programach.

Ta strona wyjaśnia, jak korzystać z formatu TF1 Piasta TF1 (lub tryb zgodności z TF2 TF1) z hub.Module klasy i związanych API. (Typowym zastosowaniem jest zbudowanie tf.Graph , ewentualnie wewnątrz TF1 Estimator , łącząc jeden lub więcej modeli w formacie TF1 Hub tf.compat.layers lub tf.layers ).

Użytkownicy TensorFlow 2 (Tryb kompatybilności TF1 zewnątrz) muszą używać nowego interfejsu API z hub.load() lub hub.KerasLayer . Nowe API ładuje nowy TF2 SavedModel Zaleta, ale ma także ograniczone wsparcie dla załadunku formacie TF1 Hub w TF2 .

Stosując model w formacie TF1 Hub

Instancji model w formacie TF1 Hub

Model w formacie TF1 Hub jest importowany do programu TensorFlow tworząc hub.Module obiektu z ciągiem z jego adres URL lub ścieżkę systemu plików, takich jak:

 m = hub.Module("path/to/a/module_dir")
 

To dodaje zmiennych modułu do bieżącego wykresu TensorFlow. Uruchamianie ich inicjatorów będzie czytać swoje wstępnie przeszkolony wartości z dysku. Podobnie, stoły i inne stanie jest dodawany do wykresu.

Moduły buforowanie

Podczas tworzenia modułu z adresu URL, zawartość modułu jest pobierane i zapisywane w folderze tymczasowym systemu lokalnego. Miejsce, w którym buforowane moduły mogą być nadpisane przy użyciu TFHUB_CACHE_DIR zmienną środowiskową. Szczegółowe informacje można znaleźć buforowania .

Stosowania modułu

Po wystąpienia, moduł m można nazwać zero lub więcej razy, jak funkcja Pythonie tensor wejść do tensor wyjść:

 y = m(x)
 

Każde takie połączenie dodaje operacji na wykresie prądu TensorFlow do obliczania y od x . Jeśli wiąże się to ze zmiennych przeszkolonych odważników, są one dzielone między wszystkich zastosowań.

Moduły można zdefiniować wiele nazwanych podpisów w celu umożliwienia stosowane w więcej niż jeden sposób (podobnie jak obiekty Pythona mają metody). Dokumentacja modułu powinien opisać dostępne podpisów. Powyżej Wezwanie dotyczy podpisu o nazwie "default" . Wszelkie podpis może być wybrany przez przepuszczenie jej nazwę do opcjonalnego signature= argument.

Jeżeli podpis ma wiele wejść, muszą być przekazywane jako dict, za pomocą klawiszy zdefiniowanych przez podpis. Podobnie, jeśli podpis ma wiele wyjść, mogą być pobierane jako dict przekazując as_dict=True , pod klawiszami określonych przez podpisu (klucz "default" jest dla pojedynczego wyjścia zwracany, jeśli as_dict=False ). Więc najbardziej ogólnej postaci nakładania wygląd modułu jak:

 outputs = m(dict(apples=x1, oranges=x2), signature="fruit_to_pet", as_dict=True)
y1 = outputs["cats"]
y2 = outputs["dogs"]
 

Dzwoniący muszą dostarczyć wszystkie wejścia zdefiniowane przez podpis, ale nie ma wymogu, aby korzystać ze wszystkich wyjść modułu jest. TensorFlow działa tylko te części modułu, który kończy się w zależności od celu w tf.Session.run() . Rzeczywiście, moduł wydawcy mogą zapewnić różne wyjściowe dla zaawansowanych zastosowań (takich jak aktywacji warstw pośrednich) wraz z głównych produktów. Moduł konsumenci powinni obsługiwać dodatkowe wyjścia wdziękiem.

Wypróbowania alternatywnych modułów

Ilekroć istnieje wiele modułów do tego samego zadania, TensorFlow Hub zachęca, aby wyposażyć je z kompatybilnych signartures (interfejsy), że próbuje różnych z nich jest tak proste jak zmienianie uchwyt modułu jako hyperparameter ciąg wycenione.

W tym celu utrzymujemy zbiór zalecanych wspólnych Podpisy do popularnych zadań.

Tworzenie nowego modułu

uwaga kompatybilność

Format TF1 Hub jest ukierunkowany TensorFlow 1. To jest tylko częściowo obsługiwane przez TF Hub w TensorFlow 2. Prosimy rozważyć opublikowanie w nowym TF2 SavedModel formacie zamiast.

Format TF1 Hub jest podobny do formatu SavedModel z TensorFlow 1 na składniowej poziomie (nazwy tego samego pliku i komunikaty protokołu), ale semantycznie różni się, aby umożliwić moduł ponownego użycia, skład i re-szkoleniowej (np inna składowanie inicjalizatorów zasób, różnego znakowania konwencje metagraphs). Najprostszym sposobem, aby odróżnić je od siebie na dysku jest obecność lub nieobecność tfhub_module.pb pliku.

Ogólne podejście

Aby zdefiniować nowy moduł, wydawca zwraca hub.create_module_spec() z funkcją module_fn . Funkcja ta tworzy wykres przedstawiający wewnętrzną konstrukcję modułu, wykorzystując tf.placeholder() dla wejścia być dostarczane przez dzwoniącego. Następnie definiuje podpisów przez wywołanie hub.add_signature(name, inputs, outputs) jeden lub więcej razy.

Na przykład:

 def module_fn():
  inputs = tf.placeholder(dtype=tf.float32, shape=[None, 50])
  layer1 = tf.layers.dense(inputs, 200)
  layer2 = tf.layers.dense(layer1, 100)
  outputs = dict(default=layer2, hidden_activations=layer1)
  # Add default signature.
  hub.add_signature(inputs=inputs, outputs=outputs)

...
spec = hub.create_module_spec(module_fn)
 

Wynikiem hub.create_module_spec() można stosować zamiast ścieżki, do wystąpienia obiektu modułu w określonym wykresem TensorFlow. W takim przypadku nie ma żadnego punktu kontrolnego, a instancja moduł zamiast użyć zmiennej inicjatorów.

Każdy przypadek moduł może być serializowane na dysku za pośrednictwem export(path, session) metody. Eksportowanie modułu serializes jego together definition z aktualnym stanem jego zmiennych w session do przeszła ścieżką. To może być stosowany podczas eksportowania modułu po raz pierwszy, jak również przy eksporcie moduł dopracowany.

Dla zgodności z TensorFlow estymatorów, hub.LatestModuleExporter moduły eksportu z najnowszego punktu kontrolnego, tak jak tf.estimator.LatestExporter eksportuje całą model z najnowszej checkpoint.

Moduł wydawcy powinni wdrożyć wspólny podpis , jeśli to możliwe, tak aby konsumenci mogli łatwo wymieniać moduły i znaleźć najlepsze dla ich problemu.

prawdziwym przykładem

Spójrz na nasz tekst osadzania modułu eksportera na przykład w świecie rzeczywistym, jak utworzyć moduł ze wspólnym formacie tekstowym osadzania.

Strojenie

Szkolenie zmiennych importowanego modułu razem z tymi od modelu wokół niego jest nazywany dostrajania. Dostrajanie może skutkować lepszą jakość, ale dodaje nowe komplikacje. Doradzamy klientom zajrzeć do dostrajania tylko po zwiedzaniu prostszych usprawnień jakościowych, i tylko wtedy, gdy wydawca moduł poleca go.

dla Konsumentów

Aby włączyć dostrajania, instancję moduł z hub.Module(..., trainable=True) , aby jego zmienne wyszkolić i import TensorFlow za REGULARIZATION_LOSSES . Jeśli moduł ma warianty wielokrotny wykres, należy wybrać jednego odpowiedniego szkolenia. Zazwyczaj jest to jeden ze znaczników {"train"} .

Wybierz system treningowy, który nie zrujnuje wstępnie przeszkolony ciężarów, na przykład niższy współczynnik uczenia się niż na szkolenie od podstaw.

dla wydawców

Aby dostrajania łatwiejsze dla konsumentów, należy pamiętać o następujących:

  • Dostrajanie wymaga uregulowania. Twój moduł jest eksportowany z REGULARIZATION_LOSSES kolekcji, która jest, co stawia swój wybór tf.layers.dense(..., kernel_regularizer=...) itp na co konsument dostaje od tf.losses.get_regularization_losses() . Preferują ten sposób definiowania strat legalizacji L1 / L2.

  • W modelu wydawcy uniknąć określenie regularyzacji L1 / L2 poprzez l1_ i l2_regularization_strength parametrów tf.train.FtrlOptimizer , tf.train.ProximalGradientDescentOptimizer i innych optymalizujące proksymalnych. Te nie są eksportowane wraz z modułem i mocne ustawienie regularyzacji globalnie mogą nie być odpowiednie dla konsumenta. Z wyjątkiem L1 uregulowania w szerokości (tj rzadki liniowy) lub szerokie i głębokie modele, powinno być możliwe, aby zamiast wykorzystywać poszczególne straty legalizacji.

  • Jeśli używasz porzucaniu, normalizacja partii lub podobnych technik szkoleniowych, ustawić swoje hiperparametrów do wartości, które mają sens w wielu przewidywanych zastosowań. Stopa przerywania może być dostosowane do skłonności problemu docelowego do przeuczenia. W normalizacji wsadowym, pęd (aka rozpad współczynnik) powinny być wystarczająco małe, aby umożliwić dostrojenie z małych zbiorów danych i / lub dużych partiach. Dla zaawansowanych konsumentów, należy rozważyć dodanie podpis, który eksponuje kontrolę nad critcial hiperparametrów.