Model dönüşümü

TensorFlow.js, tarayıcıda kullanıma hazır çeşitli önceden eğitilmiş modellerle birlikte gelir; bunları model depomuzda bulabilirsiniz. Ancak web uygulamanızda kullanmak istediğiniz TensorFlow modelini başka bir yerde bulmuş veya yazmış olabilirsiniz. TensorFlow.js bu amaç için bir model dönüştürücü sağlar. TensorFlow.js dönüştürücünün iki bileşeni vardır:

  1. TensorFlow.js'de kullanılmak üzere Keras ve TensorFlow modellerini dönüştüren bir komut satırı yardımcı programı.
  2. Modeli TensorFlow.js ile tarayıcıya yüklemek ve yürütmek için bir API.

Modelinizi dönüştürün

TensorFlow.js dönüştürücü birkaç farklı model formatıyla çalışır:

SavedModel : Bu, TensorFlow modellerinin kaydedildiği varsayılan formattır. SavedModel formatı burada belgelenmiştir.

Keras modeli : Keras modelleri genellikle HDF5 dosyası olarak kaydedilir. Keras modellerini kaydetme hakkında daha fazla bilgiyi burada bulabilirsiniz.

TensorFlow Hub modülü : Bunlar, modelleri paylaşma ve keşfetme platformu olan TensorFlow Hub'da dağıtım için paketlenmiş modellerdir. Model kütüphanesini burada bulabilirsiniz.

Dönüştürmeye çalıştığınız model türüne bağlı olarak dönüştürücüye farklı argümanlar iletmeniz gerekecektir. Örneğin model.h5 isimli bir Keras modelini tmp/ dizininize kaydettiğinizi varsayalım. Modelinizi TensorFlow.js dönüştürücüsünü kullanarak dönüştürmek için aşağıdaki komutu çalıştırabilirsiniz:

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

Bu, /tmp/model.h5 adresindeki modeli dönüştürecek ve ikili ağırlık dosyalarıyla birlikte bir model.json dosyasının çıktısını tmp/tfjs_model/ dizininize verecektir.

Farklı model formatlarına karşılık gelen komut satırı argümanları hakkında daha fazla ayrıntıyı TensorFlow.js dönüştürücü README'de bulabilirsiniz.

Dönüştürme işlemi sırasında model grafiğini geçiyoruz ve her işlemin TensorFlow.js tarafından desteklenip desteklenmediğini kontrol ediyoruz. Eğer öyleyse, grafiği tarayıcının kullanabileceği bir formatta yazarız. Ağırlıkları 4 MB'lık dosyalara bölerek modeli web'de sunulmak üzere optimize etmeye çalışıyoruz; bu şekilde tarayıcılar tarafından önbelleğe alınabiliyorlar. Ayrıca açık kaynaklı Grappler projesini kullanarak model grafiğini basitleştirmeye çalışıyoruz. Grafik basitleştirmeleri, bitişik işlemleri bir araya katlamayı, ortak alt grafikleri ortadan kaldırmayı vb. içerir. Bu değişikliklerin modelin çıktısı üzerinde hiçbir etkisi yoktur. Daha fazla optimizasyon için kullanıcılar, dönüştürücüye modeli belirli bir bayt boyutuna nicelemesi talimatını veren bir argüman iletebilirler. Niceleme, ağırlıkları daha az bitle temsil ederek model boyutunu küçültmeye yönelik bir tekniktir. Kullanıcılar, modellerinin niceleme sonrasında kabul edilebilir bir doğruluk derecesini koruduğundan emin olmak için dikkatli olmalıdır.

Dönüştürme sırasında desteklenmeyen bir işlemle karşılaşırsak işlem başarısız olur ve işlemin adını kullanıcıya yazdırırız. Bize bildirmek için GitHub'ımıza bir sorun göndermekten çekinmeyin; kullanıcı talebine yanıt olarak yeni işlemler uygulamaya çalışıyoruz.

En iyi uygulamalar

Her ne kadar dönüştürme sırasında modelinizi optimize etmek için her türlü çabayı göstersek de, genellikle modelinizin iyi performans göstermesini sağlamanın en iyi yolu, onu kaynakların kısıtlı olduğu ortamları göz önünde bulundurarak oluşturmaktır. Bu, aşırı karmaşık mimarilerden kaçınmak ve mümkün olduğunda parametre (ağırlık) sayısını en aza indirmek anlamına gelir.

Modelinizi çalıştırın

Modelinizi başarılı bir şekilde dönüştürdüğünüzde, bir dizi ağırlık dosyasına ve bir model topoloji dosyasına sahip olacaksınız. TensorFlow.js, bu model varlıklarını getirmek ve tarayıcıda çıkarım yapmak için kullanabileceğiniz model yükleme API'leri sağlar.

Dönüştürülen bir TensorFlow SavedModel veya TensorFlow Hub modülü için API şu şekilde görünür:

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

Dönüştürülen bir Keras modeli için şöyle görünüyor:

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

tf.loadGraphModel API'si bir tf.FrozenModel döndürür; bu, parametrelerin sabit olduğu ve modelinize yeni verilerle ince ayar yapamayacağınız anlamına gelir. tf.loadLayersModel API'si eğitilebilecek bir tf.Model döndürür. Bir tf.Model'in nasıl eğitileceği hakkında bilgi için modelleri eğitme kılavuzuna bakın.

Dönüşümden sonra birkaç kez çıkarım yapmak ve modelinizin hızını karşılaştırmak iyi bir fikirdir. Bu amaçla kullanılabilecek bağımsız bir kıyaslama sayfamız var: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html İlk ısınma çalıştırmasındaki ölçümleri göz ardı ettiğimizi fark edebilirsiniz - bunun nedeni (genel olarak), doku oluşturma ve gölgelendiricileri derleme yükü nedeniyle modelinizin ilk çıkarımının sonraki çıkarımlardan birkaç kat daha yavaş olmasıdır.