TensorFlow modelini TensorFlow.js'ye aktarın

TensorFlow GraphDef tabanlı modeller (genellikle Python API aracılığıyla oluşturulur) aşağıdaki formatlardan birinde kaydedilebilir:

  1. TensorFlow KaydedilenModel
  2. Dondurulmuş Model
  3. Tensorflow Hub modülü

Yukarıdaki formatların tümü, TensorFlow.js dönüştürücüsü tarafından, çıkarım için doğrudan TensorFlow.js'ye yüklenebilecek bir formata dönüştürülebilir.

(Not: TensorFlow, oturum paketi biçimini kullanımdan kaldırdı. Lütfen modellerinizi SavedModel biçimine taşıyın.)

Gereksinimler

Dönüştürme prosedürü bir Python ortamı gerektirir; pipenv veya virtualenv kullanarak yalıtılmış bir tane tutmak isteyebilirsiniz.

Dönüştürücüyü yüklemek için aşağıdaki komutu çalıştırın:

 pip install tensorflowjs

TensorFlow modelini TensorFlow.js'ye aktarmak iki adımlı bir işlemdir. Öncelikle mevcut bir modeli TensorFlow.js web formatına dönüştürün ve ardından TensorFlow.js'ye yükleyin.

1. Adım. Mevcut bir TensorFlow modelini TensorFlow.js web formatına dönüştürün

Pip paketi tarafından sağlanan dönüştürücü komut dosyasını çalıştırın:

SavedModel örneği:

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

Dondurulmuş model örneği:

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

Tensorflow Hub modülü örneği:

tensorflowjs_converter \
    --input_format=tf_hub \
    'https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/1' \
    /mobilenet/web_model
Konumsal Argümanlar Tanım
input_path Kaydedilen model dizininin, oturum paketi dizininin, dondurulmuş model dosyasının veya TensorFlow Hub modülü tanıtıcısının veya yolunun tam yolu.
output_path Tüm çıktı yapıtlarının yolu.
Seçenekler Tanım
--input_format Giriş modelinin formatı. SavedModel için tf_saved_model, frozen model için tf_frozen_model, oturum paketi için tf_session_bundle, TensorFlow Hub modülü için tf_hub ve Keras HDF5 için keras kullanın.
--output_node_names Çıkış düğümlerinin virgülle ayrılmış adları.
--saved_model_tags Yalnızca SavedModel dönüşümü için geçerlidir. Yüklenecek MetaGraphDef'in etiketleri, virgülle ayrılmış biçimde. serve varsayılanlar .
--signature_name Yalnızca TensorFlow Hub modülü dönüşümü, imzanın yüklenmesi için geçerlidir. default , varsayılandır. Bkz. https://www.tensorflow.org/hub/common_signatures/

Ayrıntılı bir yardım mesajı almak için aşağıdaki komutu kullanın:

tensorflowjs_converter --help

Dönüştürücü tarafından oluşturulan dosyalar

Yukarıdaki dönüştürme komut dosyası iki tür dosya üretir:

  • model.json : Veri akışı grafiği ve ağırlık bildirimi
  • group1-shard\*of\* : İkili ağırlık dosyalarının bir koleksiyonu

Örneğin, MobileNet v2'nin dönüştürülmesinden elde edilen çıktı:

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

Adım 2: Tarayıcıda yükleme ve çalıştırma

  1. tfjs-converter npm paketini yükleyin:

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

  1. FrozenModel sınıfını örnekleyin ve çıkarımı çalıştırın.
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));

MobileNet demosuna göz atın.

loadGraphModel API'si, istekle birlikte kimlik bilgilerini veya özel başlıkları göndermek için kullanılabilecek ek bir LoadOptions parametresini kabul eder. Ayrıntılar için loadGraphModel() belgelerine bakın.

Desteklenen işlemler

Şu anda TensorFlow.js sınırlı sayıda TensorFlow işlemini desteklemektedir. Modeliniz desteklenmeyen bir op kullanıyorsa tensorflowjs_converter betiği başarısız olur ve modelinizdeki desteklenmeyen op'ların bir listesini yazdırır. Hangi operasyonlar için desteğe ihtiyacınız olduğunu bize bildirmek üzere lütfen her operasyon için bir sorun bildirin.

Yalnızca ağırlıkların yüklenmesi

Yalnızca ağırlıkları yüklemeyi tercih ederseniz aşağıdaki kod parçasını kullanabilirsiniz:

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` ...