TensorFlow.js: Python SavedModel'i TensorFlow.js biçimine dönüştürme

1. Giriş

TensorFlow.js ile ilk adımlarınızı attınız, önceden hazırlanmış modellerimizi denediniz veya kendi modelinizi oluşturdunuz. Ancak Python'da bazı son teknoloji araştırmaların yayınlandığını gördünüz ve bu araştırmaların web tarayıcısında çalışıp çalışmayacağını merak ediyorsunuz. Belki de aklınızdaki harika fikri ölçeklenebilir bir şekilde milyonlarca insanın kullanımına sunmak istiyorsunuz. Tanıdık geldi mi? Cevabınız evet ise bu CodeLab tam size göre!

TensorFlow.js ekibi, SavedModel biçimindeki modelleri komut satırı dönüştürücü aracılığıyla TensorFlow.js'ye dönüştürmek için kullanışlı bir araç geliştirdi. Böylece bu modelleri web'in erişim ve ölçeğiyle kullanabilirsiniz.

Neler öğreneceksiniz?

Bu kod laboratuvarında, Python tarafından oluşturulan bir SavedModel'i web tarayıcısında istemci tarafında yürütme için gerekli olan model.json biçimine aktarmak üzere TensorFlow.js komut satırı dönüştürücüsünü kullanmayı öğreneceksiniz.

Özellikle:

  • Basit bir Python makine öğrenimi modeli oluşturma ve TensorFlow.js dönüştürücünün ihtiyaç duyduğu biçimde kaydetme
  • Python'dan dışa aktardığınız SavedModel'e TensorFlow.js dönüştürücüyü yükleme ve kullanma
  • Dönüştürme işleminden elde edilen dosyaları alıp JS web uygulamanızda kullanın.
  • Bir sorun olduğunda (tüm modeller dönüştürülmez) ne yapmanız gerektiğini ve hangi seçeneklere sahip olduğunuzu öğrenin.

Yeni yayınlanmış bir araştırmayı alıp bu modeli dünya genelinde milyonlarca JavaScript geliştiricisinin kullanımına sunabildiğinizi hayal edin. Veya bu kodu kendi oluşturduğunuz içerikte kullanabilirsiniz. Bu içerik, web tarayıcısında çalıştığı için karmaşık bağımlılıklar veya ortam kurulumu gerektirmez. Dolayısıyla, dünyanın her yerinden kullanıcılar bu içeriği deneyimleyebilir. Hacking'e hazır mısınız? Başlayın!

Dönüştürdüğünüz öğeleri bizimle paylaşın.

Bugün öğrendiklerinizi kullanarak Python'daki bazı favori modellerinizi dönüştürmeyi deneyebilirsiniz. Bunu başarıyla yapabilir ve modelin çalıştığı bir demo web sitesi oluşturabilirseniz projenizin TensorFlow blogumuzda veya gelecekteki göster ve anlat etkinliklerimizde yer alması için sosyal medyada #MadeWithTFJS hashtag'ini kullanarak bizi etiketleyin. Web'e aktarılan daha fazla harika araştırma görmek ve daha fazla kullanıcının bu harika örnekte olduğu gibi bu tür modelleri yenilikçi veya yaratıcı şekillerde kullanmasını sağlamak istiyoruz.

2. TensorFlow.js nedir?

1aee0ede85885520.png

TensorFlow.js, JavaScript'in çalıştırılabildiği her yerde çalışabilen bir açık kaynaklı makine öğrenimi kitaplığıdır. Python'da yazılmış orijinal TensorFlow kitaplığına dayanan bu kitaplık, JavaScript ekosisteminde bu geliştirici deneyimini ve API'lerini yeniden oluşturmayı amaçlar.

Nerede kullanılabilir?

JavaScript'in taşınabilirliği sayesinde artık tek bir dilde yazabilir ve aşağıdaki platformların tümünde kolayca makine öğrenimi gerçekleştirebilirsiniz:

  • Düz JavaScript kullanılarak web tarayıcısında istemci tarafında
  • Node.js kullanan sunucu tarafı ve Raspberry Pi gibi IoT cihazları
  • Electron'u kullanan masaüstü uygulamaları
  • React Native kullanan yerel mobil uygulamalar

TensorFlow.js, bu ortamların her birinde birden fazla arka ucu da destekler (örneğin, CPU veya WebGL gibi, içinde yürütülebileceği gerçek donanım tabanlı ortamlar). Bu bağlamda "arka uç", sunucu tarafı bir ortam anlamına gelmez. Örneğin, yürütme için arka uç WebGL'de istemci tarafı olabilir. Bu, uyumluluğu sağlamak ve her şeyin hızlı çalışmasını sağlamak içindir. TensorFlow.js şu anda şunları desteklemektedir:

  • Cihazın grafik kartında (GPU) WebGL yürütme: Bu, GPU hızlandırmasıyla daha büyük modelleri (boyutu 3 MB'tan fazla) yürütmenin en hızlı yoludur.
  • Örneğin, eski nesil cep telefonları da dahil olmak üzere cihazlarda CPU performansını artırmak için CPU'da Web Assembly (WASM) yürütme. Bu, içeriklerin grafik işlemciye yüklenmesiyle ilgili ek yük nedeniyle WASM ile CPU'da WebGL'ye kıyasla daha hızlı çalışabilen daha küçük modeller (boyutu 3 MB'tan az) için daha uygundur.
  • CPU yürütme: Diğer ortamların hiçbiri kullanılamıyorsa yedek olarak bu ortam kullanılmalıdır. Bu yöntem üçü arasında en yavaş olanıdır ancak her zaman kullanılabilir.

Not: Hangi cihazda çalıştıracağınızı biliyorsanız bu arka uçlardan birini zorunlu kılmayı seçebilirsiniz. Bunu belirtmezseniz TensorFlow.js'in sizin için karar vermesine izin verebilirsiniz.

İstemci tarafı süper güçleri

TensorFlow.js'yi istemci makinesindeki web tarayıcısında çalıştırmak, dikkate alınması gereken çeşitli avantajlar sağlayabilir.

Gizlilik

Verileri hiçbir zaman üçüncü taraf web sunucusuna göndermeden istemci makinesinde hem eğitebilir hem de sınıflandırabilirsiniz. Bu, yerel yasalara (ör. GDPR) uymak veya kullanıcının makinesinde tutmak isteyebileceği ve üçüncü tarafa gönderilmeyen verileri işlemek için gerekli olabilir.

Hız

Verileri uzak bir sunucuya göndermeniz gerekmediğinden çıkarım (verileri sınıflandırma işlemi) daha hızlı olabilir. Daha da iyisi, kullanıcı size erişim izni verirse kamera, mikrofon, GPS, ivmeölçer gibi cihaz sensörlerine doğrudan erişebilirsiniz.

Erişim ve ölçeklendirme

Dünyanın herhangi bir yerindeki kullanıcılar, tek bir tıklamayla kendilerine gönderdiğiniz bağlantıyı tıklayabilir, web sayfasını tarayıcılarında açabilir ve oluşturduğunuz içeriği kullanabilir. Makine öğrenimi sistemini kullanmak için CUDA sürücüleri ve çok daha fazlasıyla karmaşık bir sunucu tarafı Linux kurulumuna gerek yoktur.

Maliyet

Sunucu olmadığı için HTML, CSS, JS ve model dosyalarınızı barındırmak üzere yalnızca bir CDN için ödeme yapmanız gerekir. CDN'nin maliyeti, 7/24 çalışan bir sunucu (muhtemelen bağlı bir grafik kartıyla) bulundurmaktan çok daha düşüktür.

Sunucu tarafı özellikleri

TensorFlow.js'in Node.js uygulamasından yararlanarak aşağıdaki özellikler etkinleştirilir.

Tam CUDA desteği

Sunucu tarafında, grafik kartı hızlandırması için TensorFlow'un grafik kartıyla çalışmasını sağlamak üzere NVIDIA CUDA sürücülerini yüklemeniz gerekir (WebGL'nin kullanıldığı tarayıcıda yükleme gerekmez). Ancak tam CUDA desteğiyle grafik kartının daha düşük seviyeli özelliklerinden tam olarak yararlanabilir, böylece daha hızlı eğitim ve çıkarım süreleri elde edebilirsiniz. Her ikisi de aynı C++ arka ucunu paylaştığı için performans, Python TensorFlow uygulamasıyla aynı düzeydedir.

Model Boyutu

Araştırmalardaki en yeni modellerle çalışırken çok büyük modellerle (ör. gigabaytlarca) çalışabilirsiniz. Bu modeller, tarayıcı sekmesi başına bellek kullanımıyla ilgili sınırlamalar nedeniyle şu anda web tarayıcısında çalıştırılamaz. Bu büyük modelleri çalıştırmak için kendi sunucunuzda Node.js'yi kullanabilirsiniz. Sunucunuz, bu tür bir modeli verimli bir şekilde çalıştırmak için gereken donanım özelliklerine sahip olmalıdır.

IOT

Node.js, Raspberry Pi gibi popüler tek kartlı bilgisayarlarda desteklenir. Bu da TensorFlow.js modellerini bu tür cihazlarda da çalıştırabileceğiniz anlamına gelir.

Hız

Node.js, JavaScript ile yazıldığından tam zamanında derlemeden yararlanır. Bu nedenle, Node.js'yi kullandığınızda genellikle performans artışı görebilirsiniz. Çünkü Node.js, özellikle yaptığınız tüm ön işleme için çalışma zamanında optimize edilir. Bununla ilgili harika bir örneği bu örnek olayda görebilirsiniz. Bu örnek olayda, Hugging Face'in doğal dil işleme modelinde 2 kat performans artışı elde etmek için Node.js'yi nasıl kullandığı gösterilmektedir.

TensorFlow.js'in temellerini, nerede çalışabileceğini ve bazı avantajlarını öğrendiğinize göre artık TensorFlow.js ile faydalı şeyler yapmaya başlayabiliriz.

3. Sisteminizi ayarlama

Bu eğitimde, birçok kişi tarafından kullanılan ve bulut tabanlı bir sanal makinede takip etmeyi tercih ederseniz Google Cloud Compute Engine'de temel görüntü olarak kullanılabilen popüler bir Linux dağıtımı olan Ubuntu'yu kullanacağız.

Bu makalenin yazıldığı sırada, yeni bir vanilla Compute Engine örneği oluştururken Ubuntu 18.04.4 LTS görüntüsünü seçebiliyoruz. Bu görüntüyü kullanacağız. Elbette kendi makinenizi veya isterseniz farklı bir işletim sistemi kullanabilirsiniz ancak kurulum talimatları ve bağımlılıklar sistemler arasında farklılık gösterebilir.

TensorFlow'u yükleme (Python sürümü)

Şimdi de bulduğunuz veya yazacağınız mevcut Python tabanlı bir modeli dönüştürmeye çalıştığınızı varsayalım. Python'dan "SavedModel" dosyası dışa aktarabilmek için "SavedModel" zaten indirilemiyorsa TensorFlow'un Python sürümünü örneğinizde kurmanız gerekir.

Yukarıda oluşturduğunuz bulut makinenize SSH ile bağlanın ve terminal penceresine aşağıdakileri yazın:

Terminal penceresi:

sudo apt update
sudo apt-get install python3

Bu komut, makineye Python 3'ün yüklendiğinden emin olmamızı sağlar. TensorFlow'u kullanmak için Python 3.4 veya sonraki sürümlerin yüklü olması gerekir.

Doğru sürümün yüklendiğini doğrulamak için aşağıdakileri yazın:

Terminal penceresi:

python3 --version

Sürüm numarasını belirten bir çıkış görmeniz gerekir (ör. Python 3.6.9). Bu değer doğru şekilde yazdırılmışsa ve 3,4'ten yüksekse devam edebiliriz.

Ardından, Python'ın paket yöneticisi olan Python 3 için PIP'yi yükleyip güncelleyeceğiz. Tür:

Terminal penceresi:

sudo apt install python3-pip
pip3 install --upgrade pip

pip3 kurulumunu şu komutla tekrar doğrulayabiliriz:

Terminal penceresi:

pip3 --version

Bu komut yürütüldükten sonra terminale pip 20.2.3 yazıldığını görüyoruz.

TensorFlow'u yükleyebilmemiz için "setuptools" adlı Python paketinin 41.0.0 veya sonraki bir sürümde olması gerekir. En son sürüme güncellendiğinden emin olmak için aşağıdaki komutu çalıştırın:

Terminal penceresi:

pip3 install -U setuptools

Son olarak, Python için TensorFlow'u yükleyebiliriz:

Terminal penceresi:

pip3 install tensorflow

Bu işlemin tamamlanması biraz zaman alabilir. Lütfen yürütme işlemi bitene kadar bekleyin.

TensorFlow'un doğru şekilde yüklenip yüklenmediğini kontrol edelim. Geçerli dizininizde test.py adlı bir Python dosyası oluşturun:

Terminal penceresi:

nano test.py

Nano açıldıktan sonra, yüklü TensorFlow sürümünü yazdırmak için biraz Python kodu yazabiliriz:

test.py:

import tensorflow as tf
print(tf.__version__)

Değişiklikleri diske yazmak için CTRL + O tuşuna, nano düzenleyiciden çıkmak için ise CTRL + X tuşuna basın.

Artık bu Python dosyasını çalıştırarak ekrana yazdırılan TensorFlow sürümünü görebiliriz:

Terminal penceresi:

python3 test.py

Bu makalenin yazıldığı sırada, yüklü TensorFlow Python sürümümüz için konsola 2.3.1 yazdırıldığını görüyoruz.

4. Python modeli oluşturma

Bu codelab'in sonraki adımında, elde edilen eğitilmiş modeli "SavedModel" biçiminde nasıl kaydedebileceğimizi göstermek için basit bir Python modeli oluşturma işlemi açıklanacaktır. Bu model daha sonra TensorFlow.js komut satırı dönüştürücümüzle kullanılabilir. Bu ilke, dönüştürmeye çalıştığınız tüm Python modelleri için benzer olacaktır ancak herkesin anlayabilmesi için bu kodu basit tutacağız.

İlk bölümde oluşturduğumuz test.py dosyamızı düzenleyelim ve kodu aşağıdaki gibi güncelleyelim:

test.py:

import tensorflow as tf
print(tf.__version__)

# Import NumPy - package for working with arrays in Python.
import numpy as np

# Import useful keras functions - this is similar to the
# TensorFlow.js Layers API functionality.
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense

# Create a new dense layer with 1 unit, and input shape of [1].
layer0 = Dense(units=1, input_shape=[1])
model = Sequential([layer0])

# Compile the model using stochastic gradient descent as optimiser
# and the mean squared error loss function.
model.compile(optimizer='sgd', loss='mean_absolute_error')

# Provide some training data! Here we are using some fictional data 
# for house square footage and house price (which is simply 1000x the 
# square footage) which our model must learn for itself.
xs = np.array([800.0, 850.0, 900.0, 950.0, 980.0, 1000.0, 1050.0, 1075.0, 1100.0, 1150.0, 1200.0, 1250.0, 1300.0, 1400.0, 1500.0, 1600.0, 1700.0, 1800.0, 1900.0, 2000.0], dtype=float)

ys = np.array([800000.0, 850000.0, 900000.0, 950000.0, 980000.0, 1000000.0, 1050000.0, 1075000.0, 1100000.0, 1150000.0, 1200000.0,  1250000.0, 1300000.0, 1400000.0, 1500000.0, 1600000.0, 1700000.0, 1800000.0, 1900000.0, 2000000.0], dtype=float)

# Train the model for 500 epochs.
model.fit(xs, ys, epochs=500, verbose=0)

# Test the trained model on a test input value
print(model.predict([1200.0]))

# Save the model we just trained to the "SavedModel" format to the
# same directory our test.py file is located.
tf.saved_model.save(model, './')

Bu kod, sağlanan x'ler (girişler) ve y'ler (çıkışlar) arasındaki ilişkiyi tahmin etmeyi öğrenmek için çok basit bir doğrusal regresyonu eğitir. Eğitilen modeli diske kaydederiz. Her satırın ne yaptığı hakkında daha fazla bilgi için satır içi yorumları inceleyin.

Bu programı çalıştırdıktan sonra dizinimizi kontrol edersek (python3 test.py çağrısı yaparak) geçerli dizinimizde oluşturulan bazı yeni dosya ve klasörleri görmemiz gerekir:

  • test.py
  • saved_model.pb
  • varlıklar
  • variables

Artık bu modeli tarayıcıda çalışacak şekilde dönüştürmek için TensorFlow.js dönüştürücünün kullanması gereken dosyaları oluşturduk.

5. SavedModel'i TensorFlow.js biçimine dönüştürme

TensorFlow.js dönüştürücüsünü yükleme

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

Terminal penceresi:

pip3 install tensorflowjs

Oldukça kolaydı.

Yukarıda gösterilen sihirbaz sürümü yerine komut satırı dönüştürücüsünü (tensorflowjs_converter) kullandığımızı varsayarsak, yeni oluşturduğumuz kaydedilmiş modeli dönüştürmek ve parametreleri dönüştürücüye açıkça iletmek için aşağıdaki komutu çağırabiliriz:

Terminal penceresi:

tensorflowjs_converter \
    --input_format=keras_saved_model \
    ./ \
    ./predict_houses_tfjs

Neler oluyor? Öncelikle, yeni yüklediğimiz tensorflowjs_converter ikili programını çağırıyor ve kaydedilmiş bir Keras modelini dönüştürmeye çalıştığımızı belirtiyoruz.

Yukarıdaki örnek kodumuzda, modelimizi oluşturmak için Keras'ı içe aktardığımızı ve daha üst düzey katman API'lerini kullandığımızı göreceksiniz. Python kodunuzda Keras'ı kullanmadıysanız farklı bir giriş biçimi kullanmak isteyebilirsiniz:

  • keras: Keras biçimini (HDF5 dosya türü) yüklemek için
  • tf_saved_model: Keras yerine TensorFlow Core API'lerini kullanan modeli yüklemek için.
  • tf_frozen_model: Dondurulmuş ağırlıklar içeren bir modeli yüklemek için kullanılır.
  • tf_hub: TensorFlow Hub'dan oluşturulan bir modeli yüklemek için kullanılır.

Bu diğer biçimler hakkında daha fazla bilgiyi buradan edinebilirsiniz.

Sonraki 2 parametre, kaydedilen modelin hangi klasörde bulunduğunu belirtir. Yukarıdaki demomuzda önce geçerli dizini, ardından da dönüşümümüzü hangi dizine aktarmak istediğimizi belirtiriz. Bunu yukarıda geçerli dizindeki "predict_houses_tfjs" adlı bir klasör olarak belirtmiştik.

Yukarıdaki komut çalıştırıldığında, geçerli dizinde predict_houses_tfjs adlı yeni bir klasör oluşturulur ve bu klasörde : bulunur.

  • model.json
  • Group1-shard1of1.bin

Bunlar, modeli web tarayıcısında çalıştırmak için gereken dosyalardır. Bu dosyaları kaydedin. Bunları sonraki bölümde kullanacağız.

6. Dönüştürülmüş modelimizi tarayıcıda kullanma

Dönüştürülen dosyaları barındırma

Öncelikle, web sunucusunda oluşturulan model.json ve *.bin dosyalarımızı web sayfamız üzerinden erişebilmek için yerleştirmemiz gerekir. Bu demoda, kolayca takip edebilmeniz için Glitch.com'u kullanacağız. Ancak web mühendisliği alanında çalışıyorsanız bunun yerine mevcut Ubuntu sunucu örneğinizde basit bir HTTP sunucusu başlatmayı tercih edebilirsiniz. Seçim size kalmış.

Glitch'e dosya yükleme

  1. Glitch.com adresinde oturum açın.
  2. Şablon TensorFlow.js projemizi klonlamak için bu bağlantıyı kullanın. Bu, kullanıma hazır TensorFlow.js kitaplığını bizim için içe aktaran iskelet HTML, CSS ve JS dosyalarını içerir.
  3. Sol panelde "öğeler" klasörünü tıklayın.
  4. "Öğe yükle"yi tıklayın ve bu klasöre yüklenecek group1-shard1of1.bin öğesini seçin. Yüklendikten sonra şu şekilde görünmelidir: 25a2251c7f165184.png
  5. Yeni yüklediğiniz group1-shard1of1.bin dosyasını tıkladığınızda URL'yi konumuna kopyalayabilirsiniz. Bu yolu şimdi gösterildiği gibi kopyalayın: 92ded8d46442c404.png
  6. Şimdi model.json dosyasını yerel makinenizde en sevdiğiniz metin düzenleyiciyi kullanarak düzenleyin ve group1-shard1of1.bin dosyasını (CTRL+F tuşlarını kullanarak) arayın. Bu dosya, model.json dosyasının içinde bir yerde belirtilir.

Bu dosya adını 5. adımda kopyaladığınız URL ile değiştirin ancak kopyalanan yoldan kaynaklanan ve bu hatanın oluşturduğu baştaki https://cdn.glitch.com/ işaretini silin.

Düzenlendikten sonra dosya şu şekilde görünmelidir (yüklenen dosya adının korunması için baştaki sunucu yolunun nasıl kaldırıldığına dikkat edin): d5a338f2dc1f31d4.png 7. Şimdi bu düzenlenmiş model.json dosyasını kaydedin ve öğeleri tıklayarak glitch'e yükleyin, ardından "öğe yükle" düğmesini tıklayın (önemli). Fiziksel düğmeyi kullanmaz ve sürükleyip bırakma işlemini yaparsanız dosya, CDN'ye yüklenmek yerine düzenlenebilir bir dosya olarak yüklenir. Bu dosya aynı klasörde olmaz ve TensorFlow.js belirli bir model için ikili dosyaları indirmeye çalıştığında göreli yol varsayılır. İşlemi doğru şekilde yaptıysanız assets klasöründe aşağıdaki gibi 2 dosya görmeniz gerekir: 51a6dbd5d3097ffc.png

Mükemmel! Artık tarayıcıda gerçek kod kullanarak kayıtlı dosyalarımızı kullanmaya hazırız.

Modeli yükleme

Dönüştürülmüş dosyalarımızı barındırdığımıza göre artık bu dosyaları yüklemek ve tahmin yapmak için kullanmak üzere basit bir web sayfası yazabiliriz. Glitch proje klasöründe script.js dosyasını açın ve script.js dosyasını, Glitch'e yüklediğiniz model.json dosyanız için oluşturulan Glitch.com bağlantısını gösterecek şekilde değiştirdikten sonra bu dosyanın içeriğini aşağıdakilerle değiştirin:const MODEL_URL

script.js:

// Grab a reference to our status text element on the web page.
// Initially we print out the loaded version of TFJS.
const status = document.getElementById('status');
status.innerText = 'Loaded TensorFlow.js - version: ' + tf.version.tfjs;

// Specify location of our Model.json file we uploaded to the Glitch.com CDN.
const MODEL_URL = YOUR MODEL.JSON URL HERE! CHANGE THIS!';
// Specify a test value we wish to use in our prediction.
// Here we use 950, so we expect the result to be close to 950,000.
const TEST_VALUE = 950.0

// Create an asynchronous function.
async function run() {
    // Load the model from the CDN.
    const model = await tf.loadLayersModel(MODEL_URL);

    // Print out the architecture of the loaded model.
    // This is useful to see that it matches what we built in Python.
    console.log(model.summary());

    // Create a 1 dimensional tensor with our test value.
    const input = tf.tensor1d([TEST_VALUE]);

    // Actually make the prediction.
    const result = model.predict(input);

    // Grab the result of prediction using dataSync method
    // which ensures we do this synchronously.
    status.innerText = 'Input of ' + TEST_VALUE + 
        'sqft predicted as $' + result.dataSync()[0];
}

// Call our function to start the prediction!
run();

MODEL_URL sabitini model.json yolunuza işaret edecek şekilde değiştirdikten sonra yukarıdaki kodu çalıştırmak, aşağıda gösterilen çıktıyı üretir.

c5e8457213058ec3.png

Web tarayıcısının konsolunu incelersek (tarayıcıda geliştirici araçlarını açmak için F12 tuşuna basın) yüklenen modelin model açıklamasını da görebiliriz. Bu açıklama şunları yazdırır:

35e79d70dbd66f27.png

Bunu bu codelab'in başındaki Python kodumuzla karşılaştırdığımızda, 1 yoğun giriş ve 1 düğümlü bir yoğun katmanla oluşturduğumuz ağın aynı olduğunu doğrulayabiliriz.

Tebrikler! Web tarayıcısında dönüştürülmüş bir Python eğitilmiş modelini çalıştırdınız.

7. Dönüşüm gerçekleştirmeyen modeller

Daha az kullanılan işlemleri kullanmak için derlenen daha karmaşık modellerin dönüşüm için desteklenmediği zamanlar olabilir. TensorFlow.js'in tarayıcı tabanlı sürümü, TensorFlow'un tamamen yeniden yazılmış bir sürümüdür. Bu nedenle, TensorFlow C++ API'sinin sahip olduğu tüm düşük seviyeli işlemleri (binlerce işlem vardır) şu anda desteklemiyoruz. Ancak zaman içinde, büyüdükçe ve temel işlemler daha kararlı hale geldikçe daha fazla işlem eklenmektedir.

Bu makalenin yazıldığı sırada, TensorFlow Python'da savedmodel olarak dışa aktarıldığında desteklenmeyen bir işlem oluşturan işlevlerden biri linalg.diag'dır. Bunu Python'da (üretilen işlemleri destekler) kullanan bir savedmodel'i dönüştürmeye çalışırsak aşağıda gösterilene benzer bir hata görürüz:

5df94fc652393e00.png

Burada, linalg.diag çağrısının, bu codelab yazılırken web tarayıcısında TensorFlow.js tarafından desteklenmeyen MatrixDiagV3 adlı bir işlem oluşturmak için derlendiğini kırmızı renkle vurgulanmış olarak görüyoruz.

Ne yapmalısınız?

Bunun için iki seçeneğiniz vardır.

  1. Bu eksik işlemi TensorFlow.js'de uygulayın. Açık kaynaklı bir proje olduğumuz için yeni işlemler gibi konularda katkıları memnuniyetle karşılıyoruz. TensorFlow.js için yeni işlemler yazma hakkındaki bu kılavuzu inceleyin. Bunu yapmayı başarırsanız bu hatayı yoksaymak ve dönüştürmeye devam etmek için komut satırı dönüştürücümüzde Skip_op_check işaretini kullanabilirsiniz (bu işlem, oluşturduğunuz ve eksik işlemi destekleyen yeni TensorFlow.js derlemenizde kullanılabildiği varsayılır).
  2. Dışa aktardığınız savedmodel dosyasında Python kodunuzun hangi bölümünün desteklenmeyen işlemi ürettiğini belirleyin. Küçük bir kod grubunda bu kolayca bulunabilir ancak daha karmaşık modellerde, savedmodel dosya biçiminde belirli bir işlemi bir kez üreten üst düzey Python işlev çağrısını tanımlamak için şu anda bir yöntem olmadığından bu, oldukça fazla inceleme gerektirebilir. Ancak bulunduktan sonra, desteklenen farklı bir yöntemi kullanmak için bunu değiştirebilirsiniz.

8. Tebrikler

Tebrikler! Web tarayıcısında TensorFlow.js aracılığıyla Python modeli kullanma konusunda ilk adımlarınızı attınız.

Özet

Bu kod laboratuvarında şunları öğrendik:

  1. Python tabanlı TensorFlow'u yüklemek için Linux ortamımızı ayarlama
  2. Python "SavedModel" dışa aktarma
  3. TensorFlow.js komut satırı dönüştürücüsünü yükleme
  4. Gerekli istemci tarafı dosyalarını oluşturmak için TensorFlow.js komut satırı dönüştürücüsünü kullanın.
  5. Oluşturulan dosyaları gerçek web uygulamasında kullanma
  6. Dönüştürülmeyecek modelleri ve gelecekte dönüştürülmelerini sağlamak için yapılması gerekenleri belirleyin.

Yapabilecekleriniz

Sosyal medyada yer alma veya gelecekteki TensorFlow etkinliklerinde gösterilme şansı yakalamak için #MadeWithTFJS kullanarak oluşturduğunuz içeriklerde bizi etiketlemeyi unutmayın. Tarayıcıda istemci tarafında dönüştürdüğünüz ve kullandığınız öğeleri görmeyi çok isteriz.

Daha ayrıntılı bilgi için diğer TensorFlow.js Codelab uygulamaları

Göz atabileceğiniz web siteleri