Dziękujemy za zapoznanie się z Google I/O. Zobacz wszystkie sesje na żądanie Oglądaj na żądanie

Konwersja modelu

TensorFlow.js zawiera wiele wstępnie wytrenowanych modeli, które są gotowe do użycia w przeglądarce — można je znaleźć w naszym repozytorium modeli . Jednak być może znalazłeś lub stworzyłeś model TensorFlow w innym miejscu, którego chciałbyś użyć w swojej aplikacji internetowej. TensorFlow.js udostępnia w tym celu konwerter modeli. Konwerter TensorFlow.js składa się z dwóch elementów:

  1. Narzędzie wiersza poleceń, które konwertuje modele Keras i TensorFlow do użytku w TensorFlow.js.
  2. API do ładowania i wykonywania modelu w przeglądarce za pomocą TensorFlow.js.

Konwertuj swój model

Konwerter TensorFlow.js działa z kilkoma różnymi formatami modeli:

SavedModel : Jest to domyślny format, w którym zapisywane są modele TensorFlow. Format SavedModel jest udokumentowany tutaj .

Model Keras : Modele Keras są zazwyczaj zapisywane jako plik HDF5. Więcej informacji o ratowaniu modeli Keras znajdziesz tutaj .

Moduł TensorFlow Hub : są to modele, które zostały spakowane do dystrybucji na TensorFlow Hub, platformie do udostępniania i odkrywania modeli. Bibliotekę modeli można znaleźć tutaj .

W zależności od typu modelu, który próbujesz przekonwertować, będziesz musiał przekazać konwerterowi różne argumenty. Załóżmy na przykład, że zapisałeś model Keras o nazwie model.h5 w katalogu tmp/ . Aby przekonwertować swój model za pomocą konwertera TensorFlow.js, możesz uruchomić następujące polecenie:

$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model

Spowoduje to przekonwertowanie modelu w /tmp/model.h5 i wyprowadzenie pliku model.json wraz z plikami wag binarnych do katalogu tmp/tfjs_model/ .

Więcej szczegółów na temat argumentów wiersza poleceń odpowiadających różnym formatom modeli można znaleźć w pliku README konwertera TensorFlow.js.

Podczas procesu konwersji przemierzamy graf modelu i sprawdzamy, czy każda operacja jest obsługiwana przez TensorFlow.js. Jeśli tak, zapisujemy wykres w formacie, który może wykorzystać przeglądarka. Staramy się zoptymalizować model pod kątem udostępniania w sieci, dzieląc wagi na pliki o wielkości 4 MB - w ten sposób mogą one być buforowane przez przeglądarki. Próbujemy również uprościć sam wykres modelu za pomocą projektu Grappler o otwartym kodzie źródłowym. Uproszczenia wykresów obejmują składanie sąsiednich operacji, eliminowanie wspólnych podwykresów itp. Zmiany te nie mają wpływu na wynik modelu. W celu dalszej optymalizacji użytkownicy mogą przekazać argument, który nakazuje konwerterowi kwantyzację modelu do określonego rozmiaru w bajtach. Kwantyzacja to technika zmniejszania rozmiaru modelu przez reprezentowanie wag za pomocą mniejszej liczby bitów. Użytkownicy muszą być ostrożni, aby upewnić się, że ich model zachowuje akceptowalny stopień dokładności po kwantyzacji.

Jeśli podczas konwersji napotkamy nieobsługiwaną operację, proces kończy się niepowodzeniem i wypisujemy nazwę operacji dla użytkownika. Zachęcamy do zgłaszania zgłoszenia na naszym GitHubie , aby nas o tym poinformować - staramy się wdrażać nowe operacje w odpowiedzi na zapotrzebowanie użytkowników.

Najlepsze praktyki

Chociaż dokładamy wszelkich starań, aby zoptymalizować Twój model podczas konwersji, często najlepszym sposobem na zapewnienie jego dobrej wydajności jest zbudowanie go z myślą o środowiskach o ograniczonych zasobach. Oznacza to unikanie nadmiernie skomplikowanych architektur i minimalizowanie liczby parametrów (wag) tam, gdzie to możliwe.

Uruchom swój model

Po pomyślnej konwersji modelu otrzymasz zestaw plików wag i plik topologii modelu. TensorFlow.js udostępnia interfejsy API ładowania modelu, których można użyć do pobrania tych zasobów modelu i uruchomienia wnioskowania w przeglądarce.

Oto jak wygląda API dla przekonwertowanego modułu TensorFlow SavedModel lub TensorFlow Hub:

const model = await tf.loadGraphModel(‘path/to/model.json’);

A oto jak to wygląda w przypadku przekonwertowanego modelu Keras:

const model = await tf.loadLayersModel(‘path/to/model.json’);

Interfejs API tf.loadGraphModel zwraca tf.FrozenModel , co oznacza, że ​​parametry są stałe i nie będzie można dostroić modelu za pomocą nowych danych. Interfejs API tf.loadLayersModel zwraca tf.Model, który można trenować. Aby uzyskać informacje na temat trenowania tf.Model, zapoznaj się z przewodnikiem dotyczącym modeli pociągów .

Po konwersji dobrym pomysłem jest kilkakrotne przeprowadzenie wnioskowania i porównanie szybkości modelu. Mamy samodzielną stronę benchmarkingową, której można użyć do tego celu: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html Możesz zauważyć, że odrzucamy pomiary z pierwszego uruchomienia rozgrzewki - Dzieje się tak, ponieważ (ogólnie) pierwsze wnioskowanie modelu będzie kilka razy wolniejsze niż kolejne wnioskowanie z powodu narzutu na tworzenie tekstur i kompilowanie shaderów.