Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Tensoren und Operationen

TensorFlow.js ist ein Framework zum Definieren und Ausführen von Berechnungen mithilfe von Tensoren in JavaScript. Ein Tensor ist eine Verallgemeinerung von Vektoren und Matrizen auf höhere Dimensionen.

Tensoren

Die zentrale Dateneinheit in TensorFlow.js ist der tf.Tensor : eine Reihe von Werten, die zu einem Array mit einer oder mehreren Dimensionen geformt sind. tf.Tensor sind mehrdimensionalen Arrays sehr ähnlich.

Ein tf.Tensor enthält außerdem die folgenden Eigenschaften:

  • rank : Definiert, wie viele Dimensionen der Tensor enthält
  • shape : Definiert die Größe jeder Dimension der Daten
  • dtype : dtype den Datentyp des Tensors.

Ein tf.Tensor kann mit der Methode tf.tensor() aus einem Array tf.tensor() werden:

 // 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();
 

Standardmäßig hat tf.Tensor s den float32 dtype. tf.Tensor können auch mit den Typen bool, int32, complex64 und string dtypes erstellt werden:

 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 bietet auch eine Reihe von praktischen Methoden zum Erstellen von zufälligen Tensoren, mit einem bestimmten Wert gefüllten Tensoren, Tensoren aus HTMLImageElement s und vielem mehr, die Sie hier finden.

Ändern der Form eines Tensors

Die Anzahl der Elemente in einem tf.Tensor ist das Produkt der Größen in seiner Form. Da es häufig mehrere Formen mit derselben Größe geben kann, ist es oft nützlich, einen tf.Tensor in eine andere Form mit derselben Größe tf.Tensor zu können. Dies kann mit der Methode reshape() werden:

 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();
 

Werte von einem Tensor abrufen

Sie können die Werte auch mit den Tensor.array() oder Tensor.data() von einem tf.Tensor Tensor.array() :

  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));
 

Wir bieten auch synchrone Versionen dieser Methoden an, die einfacher zu verwenden sind, jedoch Leistungsprobleme in Ihrer Anwendung verursachen. Sie sollten in Produktionsanwendungen immer die asynchronen Methoden bevorzugen.

 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());
 

Operationen

Während Sie mit Tensoren Daten speichern können, können Sie mit Operationen (Ops) diese Daten bearbeiten. TensorFlow.js bietet auch eine Vielzahl von Operationen, die für lineare Algebra und maschinelles Lernen geeignet sind und mit Tensoren durchgeführt werden können.

Beispiel: Berechnen von x 2 aller Elemente in einem tf.Tensor :

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

Beispiel: Hinzufügen von Elementen von zwei Elementen von tf.Tensor :

 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();
 

Da Tensoren unveränderlich sind, ändern diese Operationen ihre Werte nicht. Stattdessen geben ops return immer neue tf.Tensor .

Eine Liste der von TensorFlow.js unterstützten Operationen finden Sie hier .

Erinnerung

Bei Verwendung des WebGL-Backends muss der tf.Tensor Speicher explizit verwaltet werden (es reicht nicht aus , einen tf.Tensor aus dem Gültigkeitsbereich zu lassen, damit sein Speicher freigegeben wird).

Um den Speicher eines tf.Tensors zu zerstören, können Sie die dispose dispose() -Methode oder tf.dispose() :

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

Es ist sehr üblich, mehrere Vorgänge in einer Anwendung miteinander zu verketten. Das Halten eines Verweises auf alle Zwischenvariablen, um sie zu entsorgen, kann die Lesbarkeit des Codes verringern. Um dieses Problem zu lösen, bietet TensorFlow.js eine tf.tidy() -Methode, mit der alle tf.Tensor bereinigt werden, die nach der Ausführung nicht von einer Funktion zurückgegeben werden, ähnlich wie lokale Variablen bei der Ausführung einer Funktion bereinigt werden:

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

In diesem Beispiel wird das Ergebnis von square() und log() automatisch entsorgt. Das Ergebnis von neg() wird nicht entsorgt, da es der Rückgabewert von tf.tidy () ist.

Sie können auch die Anzahl der von TensorFlow.js erfassten Tensoren abrufen:

 console.log(tf.memory());
 

Das von tf.memory() gedruckte Objekt enthält Informationen darüber, wie viel Speicher derzeit zugewiesen ist. Weitere Informationen finden Sie hier .