
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:
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])
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)
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:
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])
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
:
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()
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.