Zaimportuj model TensorFlow do TensorFlow.js

Modele oparte na TensorFlow GraphDef (zwykle tworzone za pomocą API Pythona) można zapisać w jednym z następujących formatów:

  1. Zapisany model TensorFlow
  2. Zamrożony model
  3. Moduł koncentratora Tensorflow

Wszystkie powyższe formaty można przekonwertować za pomocą konwertera TensorFlow.js na format, który można załadować bezpośrednio do TensorFlow.js w celu wnioskowania.

(Uwaga: TensorFlow wycofał format pakietu sesji. Przeprowadź migrację modeli do formatu SavedModel).

Wymagania

Procedura konwersji wymaga środowiska Python; możesz chcieć zachować izolowany za pomocą pipenv lub virtualenv .

Aby zainstalować konwerter, uruchom następujące polecenie:

 pip install tensorflowjs

Importowanie modelu TensorFlow do TensorFlow.js to proces dwuetapowy. Najpierw przekonwertuj istniejący model na format internetowy TensorFlow.js, a następnie załaduj go do TensorFlow.js.

Krok 1. Przekonwertuj istniejący model TensorFlow na format internetowy TensorFlow.js

Uruchom skrypt konwertera dostarczony przez pakiet pip:

Przykład zapisanego modelu:

tensorflowjs_converter \
    --input_format=tf_saved_model \
    --output_node_names='MobilenetV1/Predictions/Reshape_1' \
    --saved_model_tags=serve \
    /mobilenet/saved_model \
    /mobilenet/web_model

Przykład zamrożonego modelu:

tensorflowjs_converter \
    --input_format=tf_frozen_model \
    --output_node_names='MobilenetV1/Predictions/Reshape_1' \
    /mobilenet/frozen_model.pb \
    /mobilenet/web_model

Przykład modułu Tensorflow Hub:

tensorflowjs_converter \
    --input_format=tf_hub \
    'https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/1' \
    /mobilenet/web_model
Argumenty pozycyjne Opis
input_path Pełna ścieżka katalogu zapisanego modelu, katalogu pakietu sesji, zamrożonego pliku modelu lub uchwytu lub ścieżki modułu TensorFlow Hub.
output_path Ścieżka dla wszystkich artefaktów wyjściowych.
Opcje Opis
--input_format Format modelu wejściowego. Użyj tf_saved_model dla SavedModel, tf_frozen_model dla zamrożonego modelu, tf_session_bundle dla pakietu sesji, tf_hub dla modułu TensorFlow Hub i keras dla Keras HDF5.
--output_node_names Nazwy węzłów wyjściowych, oddzielone przecinkami.
--saved_model_tags Dotyczy tylko konwersji SavedModel. Tagi MetaGraphDef do załadowania, w formacie rozdzielanym przecinkami. Domyślnie serve .
--signature_name Dotyczy tylko konwersji modułu TensorFlow Hub, podpis do załadowania. Domyślne do default . Zobacz https://www.tensorflow.org/hub/common_signatures/

Użyj następującego polecenia, aby uzyskać szczegółową wiadomość pomocy:

tensorflowjs_converter --help

Pliki generowane przez konwerter

Powyższy skrypt konwersji tworzy dwa typy plików:

  • model.json : Wykres przepływu danych i manifest wagi
  • group1-shard\*of\* : zbiór binarnych plików wagi

Oto na przykład wynik konwersji MobileNet v2:

  output_directory/model.json
  output_directory/group1-shard1of5
  ...
  output_directory/group1-shard5of5

Krok 2: Ładowanie i uruchamianie w przeglądarce

  1. Zainstaluj pakiet tfjs-converter npm:

yarn add @tensorflow/tfjs lub npm install @tensorflow/tfjs

  1. Utwórz instancję klasy FrozenModel i uruchom wnioskowanie.
import * as tf from '@tensorflow/tfjs';
import {loadGraphModel} from '@tensorflow/tfjs-converter';

const MODEL_URL = 'model_directory/model.json';

const model = await loadGraphModel(MODEL_URL);
const cat = document.getElementById('cat');
model.execute(tf.browser.fromPixels(cat));

Sprawdź demonstrację MobileNet .

Interfejs API loadGraphModel akceptuje dodatkowy parametr LoadOptions , którego można użyć do wysłania poświadczeń lub niestandardowych nagłówków wraz z żądaniem. Szczegółowe informacje zawiera dokumentacja funkcji loadGraphModel() .

Obsługiwane operacje

Obecnie TensorFlow.js obsługuje ograniczony zestaw operacji TensorFlow. Jeśli twój model używa nieobsługiwanej operacji, skrypt tensorflowjs_converter zakończy się niepowodzeniem i wydrukuje listę nieobsługiwanych operacji w twoim modelu. Zgłoś problem dla każdej operacji, aby poinformować nas, dla których operacji potrzebujesz wsparcia.

Ładowanie tylko ciężarków

Jeśli wolisz załadować tylko wagi, możesz użyć następującego fragmentu kodu:

import * as tf from '@tensorflow/tfjs';

const weightManifestUrl = "https://example.org/model/weights_manifest.json";

const manifest = await fetch(weightManifestUrl);
this.weightManifest = await manifest.json();
const weightMap = await tf.io.loadWeights(
        this.weightManifest, "https://example.org/model");
// Use `weightMap` ...