TensorFlow GraphDef tabanlı modeller (genellikle Python API aracılığıyla oluşturulur) aşağıdaki formatlardan birinde kaydedilebilir:
- TensorFlow KaydedilenModel
- Dondurulmuş Model
- 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
- tfjs-converter npm paketini yükleyin:
yarn add @tensorflow/tfjs
veya npm install @tensorflow/tfjs
- 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` ...