Tensörler ve işlemler

TensorFlow.js, JavaScript'teki tensörleri kullanarak hesaplamaları tanımlamaya ve çalıştırmaya yönelik bir çerçevedir. Tensör, vektörlerin ve matrislerin daha yüksek boyutlara genelleştirilmesidir.

Tensörler

TensorFlow.js'deki merkezi veri birimi tf.Tensor : bir veya daha fazla boyuttan oluşan bir dizi halinde şekillendirilmiş bir değerler kümesi. tf.Tensor çok boyutlu dizilere çok benzer.

Bir tf.Tensor ayrıca aşağıdaki özellikleri de içerir:

  • rank : tensörün kaç boyut içerdiğini tanımlar
  • shape : verinin her boyutunun boyutunu tanımlar
  • dtype : tensörün veri tipini tanımlar.

Bir tf.Tensor tf.tensor() yöntemiyle bir diziden oluşturulabilir:

// Create a rank-2 tensor (matrix) matrix tensor from a multidimensional array.
const a = tf.tensor([[1, 2], [3, 4]]);
console.log('shape:', a.shape);
a.print();

// Or you can create a tensor from a flat array and specify a shape.
const shape = [2, 2];
const b = tf.tensor([1, 2, 3, 4], shape);
console.log('shape:', b.shape);
b.print();

Varsayılan olarak tf.Tensor s, float32 dtype. tf.Tensor s ayrıca bool, int32, karmaşık64 ve string dtype'leriyle de oluşturulabilir:

const a = tf.tensor([[1, 2], [3, 4]], [2, 2], 'int32');
console.log('shape:', a.shape);
console.log('dtype', a.dtype);
a.print();

TensorFlow.js ayrıca rastgele tensörler, belirli bir değerle doldurulmuş tensörler, HTMLImageElement s'den tensörler ve burada bulabileceğiniz çok daha fazlasını oluşturmak için bir dizi kolaylık yöntemi sağlar.

Tensörün şeklini değiştirme

Bir tf.Tensor eleman sayısı, şeklinin boyutlarının çarpımıdır. Çoğu zaman aynı boyutta birden fazla şekil olabileceğinden, bir tf.Tensor aynı boyutta başka bir şekle yeniden şekillendirebilmek genellikle yararlıdır. Bu, reshape() yöntemiyle başarılabilir:

const a = tf.tensor([[1, 2], [3, 4]]);
console.log('a shape:', a.shape);
a.print();

const b = a.reshape([4, 1]);
console.log('b shape:', b.shape);
b.print();

Tensörden değer alma

Değerleri ayrıca Tensor.array() veya Tensor.data() yöntemlerini kullanarak bir tf.Tensor alabilirsiniz:

 const a = tf.tensor([[1, 2], [3, 4]]);
 // Returns the multi dimensional array of values.
 a.array().then(array => console.log(array));
 // Returns the flattened data that backs the tensor.
 a.data().then(data => console.log(data));

Ayrıca bu yöntemlerin kullanımı daha basit olan ancak uygulamanızda performans sorunlarına neden olacak eşzamanlı sürümlerini de sağlıyoruz. Üretim uygulamalarında her zaman asenkron yöntemleri tercih etmelisiniz.

const a = tf.tensor([[1, 2], [3, 4]]);
// Returns the multi dimensional array of values.
console.log(a.arraySync());
// Returns the flattened data that backs the tensor.
console.log(a.dataSync());

Operasyonlar

Tensörler verileri depolamanıza izin verirken, işlemler (ops) bu verileri değiştirmenize olanak tanır. TensorFlow.js ayrıca tensörler üzerinde gerçekleştirilebilecek doğrusal cebir ve makine öğrenimine uygun çok çeşitli işlemler sağlar.

Örnek: bir tf.Tensor tüm öğelerin x 2'sini hesaplamak:

const x = tf.tensor([1, 2, 3, 4]);
const y = x.square();  // equivalent to tf.square(x)
y.print();

Örnek: iki tf.Tensor öğesinin öğelerini öğe bazında ekleme:

const a = tf.tensor([1, 2, 3, 4]);
const b = tf.tensor([10, 20, 30, 40]);
const y = a.add(b);  // equivalent to tf.add(a, b)
y.print();

Tensörler değişmez olduğundan bu işlemler değerlerini değiştirmez. Bunun yerine, ops dönüşü her zaman yeni tf.Tensor s değerini döndürür.

TensorFlow.js'nin desteklediği işlemlerin bir listesini burada bulabilirsiniz.

Hafıza

WebGL arka ucunu kullanırken, tf.Tensor belleğinin açıkça yönetilmesi gerekir (belleğinin serbest bırakılması için bir tf.Tensor kapsam dışına çıkmasına izin vermek yeterli değildir ).

Bir tf.Tensor'un belleğini yok etmek için, dispose() yöntemini veya tf.dispose() yöntemini kullanabilirsiniz:

const a = tf.tensor([[1, 2], [3, 4]]);
a.dispose(); // Equivalent to tf.dispose(a)

Bir uygulamada birden fazla işlemin birlikte zincirlenmesi çok yaygındır. Bunları ortadan kaldırmak için tüm ara değişkenlere bir referans tutmak kodun okunabilirliğini azaltabilir. Bu sorunu çözmek için TensorFlow.js, bir işlev çalıştırıldığında yerel değişkenlerin temizlenmesine benzer şekilde, bir işlev çalıştırıldıktan sonra bir işlev tarafından döndürülmeyen tüm tf.Tensor temizleyen bir tf.tidy() yöntemi sağlar:

const a = tf.tensor([[1, 2], [3, 4]]);
const y = tf.tidy(() => {
  const result = a.square().log().neg();
  return result;
});

Bu örnekte square() ve log() un sonucu otomatik olarak atılacaktır. neg() nin sonucu, tf.tidy()'nin dönüş değeri olduğundan atılmayacaktır.

Ayrıca TensorFlow.js tarafından takip edilen Tensörlerin sayısını da alabilirsiniz:

console.log(tf.memory());

tf.memory() tarafından yazdırılan nesne, o anda ne kadar belleğin tahsis edildiğine ilişkin bilgileri içerecektir. Daha fazla bilgiyi burada bulabilirsiniz.