Tensoren in TensorFlow

Bild


Das in Tensorflow manipulierte Hauptobjekt ist der Tensor. Was Tensoren sind, welche Tensoren sind, welche Eigenschaften sie haben und wie man sie manipuliert, lesen Sie im Übersetzungsleitfaden von tensorflow.org.


TensorFlow ist, wie der Name schon sagt, eine Plattform zur Definition und Durchführung von Berechnungen mit Tensoren. Ein Tensor ist eine Verallgemeinerung von Vektoren und Matrizen zu höheren Dimensionen. In TensorFlow werden Tensoren als n-dimensionale Arrays grundlegender Datentypen dargestellt.


Wenn Sie ein TensorFlow-Programm schreiben, ist das Hauptobjekt, das Sie tf.Tensor und übergeben, tf.Tensor . TensorFlow-Programme erstellen zunächst ein Diagramm mit tf.Tensor Objekten und beschreiben detailliert, wie jeder Tensor anhand der anderen verfügbaren Tensoren berechnet wird. Anschließend führen Sie Teile dieses Diagramms aus, um die Berechnungsergebnisse zu erhalten.


tf.Tensor bietet folgende Optionen:


  • Datentyp (z. B. float32 , int32 oder string )
  • Größen (Form)

Alle Tensorelemente haben den gleichen Datentyp und sind immer bekannt. Abmessungen (Anzahl der Messungen und Größe jeder Messung) können nur teilweise bekannt sein. Das Ergebnis der meisten Operationen sind Tensoren mit bekannten Dimensionen, wenn die Dimensionen am Eingang ebenfalls vollständig bekannt sind. In einigen Fällen ist es jedoch möglich, die Dimensionen des Tensors nur während der Ausführung des Graphen herauszufinden.


Die Hauptarten von Tensoren sind wie folgt:


  • tf.Variable
  • tf.constant
  • tf.placeholder
  • tf.SparseTensor

Mit Ausnahme von tf.Variable der tf.Variable unverändert, d.h. Im Kontext einer Ausführung kann ein Tensor nur einen Wert haben. Die zweimalige Berechnung desselben Tensors kann jedoch unterschiedliche Werte zurückgeben. Beispielsweise kann derselbe Tensor das Ergebnis des Lesens von Daten von einer Platte oder des Erzeugens einer Zufallszahl sein.


Note


Der Rang des tf.Tensor Objekts ist die Anzahl seiner Dimensionen. Die Synonyme eines Ranges sind Reihenfolge , Grad , Dimension . Beachten Sie, dass ein Rang in TensorFlow nicht mit einem Matrixrang in Mathe identisch ist. Wie die folgende Tabelle zeigt, entspricht jeder Rang in Tensorflow einer mathematischen Einheit:


NoteMathematische Einheit
0Skalar (nur Wert)
1Vektor (Größe und Richtung)
2Matrix (Zahlentabelle)
33-Tensor (Zahlenwürfel)
nn-tensor (na ja, du kommst auf die Idee)

Rang 0


Das folgende Snippet zeigt die Erstellung mehrerer Variablen mit Rang 0:


 mammal = tf.Variable("Elephant", tf.string) ignition = tf.Variable(451, tf.int16) floating = tf.Variable(3.14159265359, tf.float64) its_complicated = tf.Variable(12.3 - 4.85j, tf.complex64) 

Hinweis: Eine Zeichenfolge wird in TensorFlow als einzelnes Objekt und nicht als Zeichenfolge betrachtet. Es ist möglich, String-Skalare, Zeilenvektoren usw. zu verwenden.

Rang 1


Um ein tf.Tensor Objekt mit Rang 1 zu erstellen, können Sie eine Liste von Elementen als Anfangswerte übergeben. Zum Beispiel:


 mystr = tf.Variable(["Hello"], tf.string) cool_numbers = tf.Variable([3.14159, 2.71828], tf.float32) first_primes = tf.Variable([2, 3, 5, 7, 11], tf.int32) its_very_complicated = tf.Variable([12.3 - 4.85j, 7.5 - 6.23j], tf.complex64) 

Höhere Ränge


Rang 2 des tf.Tensor Objekts besteht aus mindestens einer Zeile und einer Spalte:


 mymat = tf.Variable([[7],[11]], tf.int16) myxor = tf.Variable([[False, True],[True, False]], tf.bool) linear_squares = tf.Variable([[4], [9], [16], [25]], tf.int32) squarish_squares = tf.Variable([ [4, 9], [16, 25] ], tf.int32) rank_of_squares = tf.rank(squarish_squares) mymatC = tf.Variable([[7],[11]], tf.int32) 

Tensoren mit höherem Rang bestehen ebenfalls aus n-dimensionalen Arrays. Beispielsweise werden bei der Verarbeitung von Bildern viele Tensoren des Rangs 4 verwendet, deren Abmessungen der Beispielnummer im Paket, der Bildhöhe, der Bildbreite und dem Farbkanal entsprechen.


 my_image = tf.zeros([10, 299, 299, 3]) #   x  x  x    

Den tf.Tensor Objektrang erhalten


Rufen Sie die tf.rank Methode auf, um den Rang des tf.Tensor Objekts zu bestimmen. Die folgende Methode ermittelt beispielsweise programmgesteuert den tf.Tensor angegebenen Rang von tf.Tensor :


 r = tf.rank(my_image) #   , r   4. 

Links zu Slices tf.Tensor


Da tf.Tensor ein n-dimensionales Array von Zellen ist, tf.Tensor Sie n Indizes angeben, um auf eine einzelne Zelle in tf.Tensor .


Für Tensoren des Rangs 0 (Skalare) werden keine Indizes benötigt, da dies bereits eine Zahl ist.


Bei einem Tensor des Rangs 1 (Vektor) erhalten Sie durch Übergeben eines einzelnen Index Zugriff auf die Zahl:


 my_scalar = my_vector[2] 

Beachten Sie, dass der an [] Index selbst ein tf.Tensor Skalar sein kann, wenn Sie ein Element aus einem Vektor dynamisch auswählen möchten.


Für Tensoren ab Rang 2 ist die Situation interessanter. Für tf.Tensor Rang 2 gibt das Übergeben von zwei Zahlen wie von einem Skalar erwartet zurück:


 my_scalar = my_matrix[1, 2] 

Wenn Sie jedoch eine einzelne Zahl übergeben, wird ein Teilvektor der Matrix wie folgt zurückgegeben:


 my_row_vector = my_matrix[2] my_column_vector = my_matrix[:, 3] 

Notation : In der Syntax wird die Subarray-Zuordnung in Python als "Diese Dimension in Ruhe lassen" verwendet. Dies ist nützlich bei Tensoren mit hohem Rang, da hiermit der Zugriff auf Subvektoren, Submatrizen und sogar andere Subtensoren möglich ist.


Abmessungen


Die Tensordimensionen geben die Anzahl der Elemente in jeder Dimension an. In der TensorFlow-Dokumentation werden drei Konventionen verwendet, um die Dimension eines Tensors zu beschreiben: Rang, Dimensionen und Anzahl der Dimensionen. Die folgende Tabelle zeigt, wie sie sich zueinander verhalten:


NoteAbmessungenAnzahl der MessungenBeispiel
0[]0-D0-D-Tensor. Scalar.
1[D0]1-D1-D-Größentensor [5].
2[D0, D1]2-D2-D-Größentensor [3, 4].
3[D0, D1, D2]3-D3-D-Größentensor [1, 4, 3].
n[D0, D1, ... Dn-1]nDGrößentensor [D0, D1, ... Dn-1].

Größen können als Python-Listen / Tupel von ganzen Zahlen oder mit dargestellt werden
tf.TensorShape .


tf.Tensor der Größe des tf.Tensor Objekts


Es gibt zwei Möglichkeiten, um tf.Tensor Dimensionen zu erhalten. Bei der Erstellung eines Graphen ist es oft nützlich zu fragen, was über die Größe des Tensors bereits bekannt ist. Dies kann durch Lesen der shape Eigenschaft des tf.Tensor Objekts erfolgen. Diese Methode gibt ein TensorShape Objekt zurück. Dies ist eine bequeme Methode.
Darstellungen von teilweise definierten Größen (da beim Erstellen eines Diagramms nicht alle Größen vollständig bekannt sein können).


Sie können auch tf.Tensor das die vollständig definierten Dimensionen eines anderen tf.Tensor zur Laufzeit darstellt. Dies erfolgt durch tf.shape Operation tf.shape . Auf diese Weise können Sie ein Diagramm erstellen, das die Größen von Tensoren manipuliert, indem Sie andere Tensoren in Abhängigkeit von den dynamischen Größen der Eingabe tf.Tensor .


Sie können beispielsweise einen Vektor aus Nullen erstellen, der die gleiche Größe wie die Anzahl der Spalten einer bestimmten Matrix hat:


 zeros = tf.zeros(my_matrix.shape[1]) 

Ändern tf.Tensor Größe des tf.Tensor


Die Anzahl der Tensorelemente ist das Produkt aller Messungen. Die Anzahl der Skalarelemente beträgt immer 1 . Da viele verschiedene Größen die gleiche Anzahl von Elementen ergeben können, ist es häufig praktisch, die Größe von tf.Tensor zu ändern, ohne die Elemente zu ändern. Dies kann mit tf.reshape .


Die folgenden Beispiele zeigen, wie Sie die Größe eines Tensors ändern können:


 rank_three_tensor = tf.ones([3, 4, 5]) matrix = tf.reshape(rank_three_tensor, [6, 10]) #    #   6x10 matrixB = tf.reshape(matrix, [3, -1]) #     #  3x20. -1  reshape   #    . matrixAlt = tf.reshape(matrixB, [4, 3, -1]) #     #  4x3x5 # ,         #   .     #         #     . yet_another = tf.reshape(matrixAlt, [13, 2, -1]) # ERROR! 

Datentypen


Tensoren haben neben Dimension einen Datentyp. Ein bestimmter tf.Tensor kann nicht mehr als einen Datentyp haben. Es ist jedoch möglich, beliebige Datenstrukturen in einen string zu serialisieren und in tf.Tensor speichern.


Sie können tf.Tensor von einem Datentyp in einen anderen tf.cast :


 #         . float_tensor = tf.cast(tf.constant([1, 2, 3]), dtype=tf.float32) 

Verwenden Sie die Tensor.dtype Eigenschaft, um den Tensor.dtype Datentyp Tensor.dtype .


Wenn Sie tf.Tensor aus einem Python-Objekt erstellen, können Sie optional einen Datentyp angeben. Andernfalls wählt TensorFlow einen Datentyp aus, der Ihre Daten darstellen kann. TensorFlow konvertiert Python-Ganzzahlen in tf.int32 und Gleitkommazahlen in tf.float32 . In anderen Fällen verwendet TensorFlow beim Konvertieren von Arrays dieselben Regeln wie numpy.


Tensor-Bewertung


Sobald ein Berechnungsdiagramm erstellt wurde, können Sie eine Berechnung ausführen, die
generiert einen spezifischen tf.Tensor und extrahiert den ihm zugewiesenen Wert. Dies ist häufig nützlich für das Debuggen sowie für die Arbeit mit den meisten TensorFlow-Anwendungen.


Die einfachste Methode zur Bewertung von Tensor ist die Verwendung der Tensor.eval Methode. Zum Beispiel:


 constant = tf.constant([1, 2, 3]) tensor = constant * constant print(tensor.eval()) 

Die Methode eval funktioniert nur, wenn die Standardeinstellung tf.Session . Tensor.eval gibt ein Numpy-Array mit dem gleichen Inhalt wie der Tensor zurück.


Manchmal ist es unmöglich, tf.Tensor ohne Kontext auszuwerten, da sein Wert von dynamischen Informationen abhängt, die nicht verfügbar sind. Beispielsweise können placeholder Tensoren nicht bewertet werden, ohne einen Wert für den placeholder .


 p = tf.placeholder(tf.float32) t = p + 1.0 t.eval() #   ,   placeholder   . t.eval(feed_dict={p:2.0}) #  ,     #   placeholder. 

Bitte beachten Sie, dass Sie jeden tf.Tensor , nicht nur den Platzhalter.


Andere Modellkonstruktionen können die tf.Tensor erschweren. TensorFlow kann tf.Tensor das in Funktionen oder in Kontrollflusskonstrukten definiert ist, nicht direkt auswerten. Wenn tf.Tensor vom Wert aus der Warteschlange abhängt, tf.Tensor der tf.Tensor Score nur, wenn sich etwas in der Warteschlange befindet. Andernfalls friert die Tensorschätzung ein. tf.train.start_queue_runners Arbeit mit Warteschlangen daran, tf.train.start_queue_runners bevor Sie tf.Tensor .


Nach der Überprüfung wird die Übersetzung auch auf Tensorflow.org angezeigt. Wenn Sie an der Übersetzung der Dokumentation der Tensorflow.org-Website ins Russische teilnehmen möchten, wenden Sie sich bitte an eine Person oder einen Kommentar. Korrekturen oder Kommentare sind willkommen.

Source: https://habr.com/ru/post/de484214/


All Articles