TensorFlow.js, TensorFlow ve Keras modellerini JavaScript ile tarayıcıda çalıştırmanızı sağlayan bir makine öğrenmesi kütüphanesidir. Girdiyi çıkarım için sunucuya göndermek yerine modeli kullanıcının tarayıcısında yükleyip görüntü, ses veya başka girdiler üzerinde tahmin üretebilirsiniz. Böylece bir web sayfası; kamera görüntüsünde nesne algılama, fotoğrafta sınıflandırma ya da basit bir kişiselleştirme işlemini, uygun model ve cihaz bulunduğu sürece doğrudan istemci tarafında yapabilir.
Tarayıcı önce TensorFlow.js kitaplığını ve model dosyalarını indirir. Model daha sonra JavaScript kodu tarafından belleğe alınır; uygulama girdiyi modelin beklediği biçime dönüştürür ve modelden tahmin sonucu ister. Çıktı genellikle sınıf olasılıkları, sayısal tahminler veya algılanan nesnelerin konumlarıdır.
Çalışma hızı, modelin boyutuna, girdinin çözünürlüğüne ve cihazın işlem gücüne bağlıdır. TensorFlow.js uygun olduğunda tarayıcının hızlandırma olanaklarından yararlanabilir; WebAssembly daha taşınabilir bir CPU seçeneği sunarken WebGL gibi arka uçlar bazı işlemleri GPU üzerinde hızlandırabilir. Bu nedenle güçlü bir bilgisayarda hızlı çalışan model, eski bir telefonda yavaşlayabilir.
TensorFlow.js özellikle tarayıcıda gerçek zamanlı veya düşük gecikmeli tahmin gereken uygulamalarda kullanışlıdır. Kamera ve mikrofon gibi tarayıcı kaynaklarından alınan veri, uygulamanın tasarımına bağlı olarak sunucuya gönderilmeden işlenebilir. Bu, veri aktarımını azaltabilir; ancak verinin gizli kalmasını otomatik olarak garanti etmez. Uygulamanız girdiyi ayrıca bir API'ye gönderiyorsa veri yine sunucuya ulaşır.
Tarayıcıda büyük ve ağır modelleri çalıştırmak ise her zaman uygun değildir. Kullanıcı model dosyalarını indirmek zorunda kalır, tarayıcı belleği sınırlıdır ve düşük güçlü cihazlarda işlem süresi uzayabilir. Büyük modeller, merkezi veri işleme veya sürekli yüksek performans gerekiyorsa sunucu tarafı çıkarımı daha uygun olabilir.
Aşağıdaki ayrım, mimari kararı verirken kullanılabilir:
TensorFlow.js modelin doğru tahmin yapacağını da garanti etmez. Sonuç, eğitim verisinin kalitesine, modelin beklediği ön işleme adımlarına ve sınıfların nasıl tanımlandığına bağlıdır. Modelin çıktısı yüksek olasılık verse bile bu, tahminin kesin veya gerçek olduğu anlamına gelmez.
Örnekteki
Bu kodda
Modelin giriş şekli, veri türü, normalizasyon yöntemi ve çıktı biçimi modelle birlikte bilinmelidir. Görüntüyü
Başlangıç için küçük, iyi tanımlanmış bir sınıflandırma veya görüntü modeli seçin. Model tarayıcıda kabul edilebilir sürede yükleniyor, beklenen giriş şekliyle çalışıyor ve doğrulama verisinde anlamlı sonuç veriyorsa TensorFlow.js bu modeli web uygulamasına taşımak için uygun bir katman sağlar. Uygulamanın gerçek başarısını ise kitaplık değil, modelin kalitesi ve onu kullanan kodun doğru ön işleme yapması belirler.
Tarayıcıda nasıl çalışır?
Tarayıcı önce TensorFlow.js kitaplığını ve model dosyalarını indirir. Model daha sonra JavaScript kodu tarafından belleğe alınır; uygulama girdiyi modelin beklediği biçime dönüştürür ve modelden tahmin sonucu ister. Çıktı genellikle sınıf olasılıkları, sayısal tahminler veya algılanan nesnelerin konumlarıdır.
Çalışma hızı, modelin boyutuna, girdinin çözünürlüğüne ve cihazın işlem gücüne bağlıdır. TensorFlow.js uygun olduğunda tarayıcının hızlandırma olanaklarından yararlanabilir; WebAssembly daha taşınabilir bir CPU seçeneği sunarken WebGL gibi arka uçlar bazı işlemleri GPU üzerinde hızlandırabilir. Bu nedenle güçlü bir bilgisayarda hızlı çalışan model, eski bir telefonda yavaşlayabilir.
Ne işe yarar, neyi çözmez?
TensorFlow.js özellikle tarayıcıda gerçek zamanlı veya düşük gecikmeli tahmin gereken uygulamalarda kullanışlıdır. Kamera ve mikrofon gibi tarayıcı kaynaklarından alınan veri, uygulamanın tasarımına bağlı olarak sunucuya gönderilmeden işlenebilir. Bu, veri aktarımını azaltabilir; ancak verinin gizli kalmasını otomatik olarak garanti etmez. Uygulamanız girdiyi ayrıca bir API'ye gönderiyorsa veri yine sunucuya ulaşır.
Tarayıcıda büyük ve ağır modelleri çalıştırmak ise her zaman uygun değildir. Kullanıcı model dosyalarını indirmek zorunda kalır, tarayıcı belleği sınırlıdır ve düşük güçlü cihazlarda işlem süresi uzayabilir. Büyük modeller, merkezi veri işleme veya sürekli yüksek performans gerekiyorsa sunucu tarafı çıkarımı daha uygun olabilir.
Aşağıdaki ayrım, mimari kararı verirken kullanılabilir:
| Yaklaşım | İşlem nerede yapılır? | Öne çıkan sonuç | Dikkat edilmesi gereken |
|---|---|---|---|
| TensorFlow.js ile tarayıcı | Kullanıcının cihazında | Düşük ağ gecikmesi, istemci tarafında çalışma | Model indirme süresi, cihaz performansı ve tarayıcı belleği |
| Sunucu tarafı model | Uygulamanın sunucusunda | Merkezi donanım ve model yönetimi | Ağ gecikmesi, sunucu maliyeti ve gönderilen verinin korunması |
En küçük model çalıştırma örneği
Örnekteki
model.json adresinin, tf.loadLayersModel() ile yüklenebilen LayersModel biçiminde gerçek bir model dosyasına işaret ettiğini varsayalım. TensorFlow SavedModel’dan GraphModel biçimine dönüştürülmüş modeller için tf.loadGraphModel() gerekir; aynı model.json dosya adı bu iki biçimin uyumlu olduğunu göstermez. Modelin tek bir sayı beklediği ve tek bir sayı ürettiği basit bir senaryoda işlem şu şekildedir:
HTML:
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
<script>
async function calistir() {
const model = await tf.loadLayersModel('/model/model.json');
const girdi = tf.tensor2d([[5]], [1, 1]);
const tahmin = model.predict(girdi);
const sonuc = await tahmin.data();
console.log('Model çıktısı:', sonuc[0]);
girdi.dispose();
tahmin.dispose();
model.dispose();
}
calistir();
</script>
Bu kodda
tf.loadLayersModel() model dosyasını yükler, tf.tensor2d() modelin beklediği tensör girdisini oluşturur ve predict() tahmin üretir. Konsolda görülen sayı yalnızca modelin kendi çıktısıdır; anlamını, modelin eğitiminde kullanılan hedef ve veri biçimi belirler. Örneğin model sıcaklık tahmini için eğitildiyse sayı sıcaklıkla ilgili olabilir; görüntü sınıflandırması için eğitildiyse aynı kod ve aynı çıktı yorumu geçerli olmaz.Çalıştırmadan önce kontrol edilmesi gerekenler
Modelin giriş şekli, veri türü, normalizasyon yöntemi ve çıktı biçimi modelle birlikte bilinmelidir. Görüntüyü
0-255 aralığından 0-1 aralığına çevirmek gerekiyorsa bu işlem yapılmadan verilen görüntü yanlış tahmin üretebilir. Ayrıca model.json ve ona bağlı ağırlık dosyaları aynı erişilebilir model dizininde bulunmalı; sayfa modeli yükledikten sonra tarayıcı geliştirici araçlarındaki konsolda ağ veya şekil uyuşmazlığı hatası olmamalıdır.Başlangıç için küçük, iyi tanımlanmış bir sınıflandırma veya görüntü modeli seçin. Model tarayıcıda kabul edilebilir sürede yükleniyor, beklenen giriş şekliyle çalışıyor ve doğrulama verisinde anlamlı sonuç veriyorsa TensorFlow.js bu modeli web uygulamasına taşımak için uygun bir katman sağlar. Uygulamanın gerçek başarısını ise kitaplık değil, modelin kalitesi ve onu kullanan kodun doğru ön işleme yapması belirler.
Son düzenleme: