wake-up-neo.com

Wie ist der Begriff "Tensor" in TensorFlow zu verstehen?

Ich bin neu bei TensorFlow. Während ich die vorhandene Dokumentation lese, fand ich den Begriff tensor wirklich verwirrend. Aus diesem Grund muss ich die folgenden Fragen klären:

  1. Welche Beziehung besteht zwischen tensor und Variable, tensor
    vs. tf.constant, 'tensor' vs. tf.placeholder?
  2. Sind sie alle Arten von Tensoren?
29
ZijunLost

TensorFlow verfügt nicht über erstklassige Tensor-Objekte. Dies bedeutet, dass im zugrunde liegenden Diagramm, das von der Laufzeitumgebung ausgeführt wird, keine Ahnung von Tensor vorhanden ist. Stattdessen besteht der Graph aus miteinander verbundenen Op-Knoten, die Operationen darstellen. Eine Operation reserviert Speicher für ihre Ausgaben, die auf den Endpunkten :0, :1 usw. verfügbar sind, und Sie können sich jeden dieser Endpunkte als Tensor vorstellen. Wenn tensornodename:0 entspricht, können Sie den Wert als sess.run(tensor) oder sess.run('nodename:0') abrufen. Die Ausführungsgranularität findet auf der Operationsebene statt. Daher führt die run-Methode op aus, das alle Endpunkte berechnet, nicht nur den :0-Endpunkt. Es ist möglich, einen Op - Knoten ohne Ausgaben (wie tf.group) zu haben. In diesem Fall sind keine Tensoren zugeordnet. Es ist nicht möglich, Tensoren ohne einen darunter liegenden Op - Knoten zu haben.

Sie können untersuchen, was im darunter liegenden Diagramm geschieht, indem Sie so etwas tun

tf.reset_default_graph()
value = tf.constant(1)
print(tf.get_default_graph().as_graph_def())

Mit tf.constant erhalten Sie also einen einzelnen Operationsknoten, den Sie mit sess.run("Const:0") oder sess.run(value) abrufen können.

In ähnlicher Weise erstellt value=tf.placeholder(tf.int32) einen regulären Knoten mit dem Namen Placeholder, und Sie können ihn als feed_dict={"Placeholder:0":2} oder feed_dict={value:2} eingeben. Sie können einen Platzhalter nicht mit demselben session.run-Aufruf füttern und abrufen. Sie können das Ergebnis jedoch sehen, indem Sie einen tf.identity-Knoten oben anhängen und dieses abrufen.

Für Variable

tf.reset_default_graph()
value = tf.Variable(tf.ones_initializer()(()))
value2 = value+3
print(tf.get_default_graph().as_graph_def())

Sie werden sehen, dass zwei Knoten Variable und Variable/read erstellt werden. Der :0-Endpunkt ist ein gültiger Wert, der auf diesen beiden Knoten abgerufen werden kann. Variable:0 hat jedoch einen speziellen ref-Typ, was bedeutet, dass er als Eingabe für mutierende Operationen verwendet werden kann. Das Ergebnis des Python-Aufrufs tf.Variable ist ein Python Variable-Objekt, und es gibt etwas Python-Magie, um Variable/read:0 oder Variable:0 zu ersetzen, je nachdem, ob eine Mutation erforderlich ist. Da die meisten Operationen nur einen Endpunkt haben, wird :0 gelöscht. Ein anderes Beispiel ist Queue - close(). Die Methode erstellt einen neuen Close-Op-Knoten, der eine Verbindung zu Queue-Op herstellt. Zusammenfassend können Operationen auf Python-Objekten wie Variable und Queue abhängig von der Verwendung unterschiedlichen TensorFlow-Op-Knoten zugeordnet werden. 

Bei Operationen wie tf.split oder tf.nn.top_k, die Knoten mit mehreren Endpunkten erstellen, umschließt der session.run-Aufruf von Python die Ausgabe automatisch in Tuple- oder collections.namedtuple von Tensor-Objekten, die einzeln abgerufen werden können.

54

Aus dem Glossar :

Ein Tensor ist ein typisiertes multidimensionales Array. Zum Beispiel ein 4-D-Array von Fließkommazahlen, das einen Mini-Stapel von Bildern mit Abmessungen [Stapel, Höhe, Breite, Kanal] darstellt.

Grundsätzlich ist jedes data ein Tensor in TensorFlow (daher der Name):

  • platzhalter sind Tensoren, denen Sie einen Wert zuführen können (mit dem Argument feed_dict in sess.run()).
  • Variablen sind Tensoren, die Sie aktualisieren können (mit var.assign()). Technisch gesehen ist tf.Variable jedoch keine Unterklasse von tf.Tensor
  • tf.constant ist nur der einfachste Tensor, der einen festen Wert enthält, der beim Erstellen angegeben wird

In der Grafik ist jedoch jeder Knoten eine Operation, die Tensors als Ein- oder Ausgänge haben kann.

12

Wie schon von anderen erwähnt, sind sie ja alle Tensoren.

Ich verstand dies so, dass ich zunächst 1D-, 2D-, 3D-, 4D-, 5D- und 6D-Tensoren wie in der Abbildung unten visualisieren und verstehen sollte. (Quelle: knoldus)

 tensor-definition

Nun können Sie sich im Zusammenhang mit TensorFlow einen Berechnungsgraphen wie den folgenden vorstellen:

 computation-graph

Hier nehmen die Ops zwei Tensoren a und b als input an; multipliziert die Tensoren mit sich selbst und dann addiert das Ergebnis dieser Multiplikationen, um den Ergebnistensor t3 zu erzeugen. Und diese Multiplikationen und AdditionOps kommen an den Knoten im Berechnungsgraphen vor.

Diese Tensoren a und b können konstante Tensoren, variable Tensoren oder Platzhalter sein. Es spielt keine Rolle, solange sie den gleichen Datentyp und kompatible Formen (oder broadcastable) haben, um die Operationen auszuführen.

6
kmario23

Der zentrale Datentyp von TensorFlow ist der Tensor. Tensoren sind die grundlegenden Komponenten der Berechnung und eine grundlegende Datenstruktur in TensorFlow. Ohne komplexe mathematische Interpretationen zu verwenden, können wir sagen, dass ein Tensor (in TensorFlow) ein mehrdimensionales numerisches Array mit null- oder n-dimensionaler Sammlung von Daten beschreibt, die durch Rang, Form und Typ bestimmt werden.Weiterlesen: Was sind Tensoren in TensorFlow ?

0
Amit Arora