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 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 olabildiği için, 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 senkronize versiyonlarını da 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.