Ok, ich glaube, der wichtigste Punkt, dass, wenn Sie in den Reihen (dh Zug mit mehreren Instanzen des Trainingssatzes auf einmal) zu trainieren, TensorFlow geht immer davon aus, dass die Die nullte Dimension x
gibt die Anzahl der Ereignisse pro Batch an.
Angenommen, Sie möchten eine Trainingsinstanz der Dimension M einer Zielinstanz der Dimension N zuordnen. Sie würden dies normalerweise tun, indem Sie x (einen Spaltenvektor) mit einer NxM-Matrix multiplizieren (und optional eine Verzerrung mit Dimension hinzufügen) N (auch ein Spaltenvektor)), dh
y = W * x + b, wobei y auch ein Spaltenvektor ist.
Das ist aus der Perspektive der linearen Algebra vollkommen in Ordnung. Aber jetzt kommt der Punkt mit dem Training in Chargen, d. H. Training mit mehreren Trainingsinstanzen auf einmal. Um dies zu verstehen, kann es hilfreich sein, x (und y) nicht als Vektoren der Dimension M (und N), sondern als Matrizen mit den Dimensionen Mx1 (und Nx1 für y) zu betrachten. Da TensorFlow davon ausgeht, dass die verschiedenen Trainingsinstanzen, die einen Stapel bilden, entlang der nullten Dimension ausgerichtet sind, geraten wir hier in Schwierigkeiten, da die nullte Dimension von den verschiedenen Elementen einer einzelnen Instanz eingenommen wird. Der Trick ist dann die obige Gleichung zu transponieren (zur Erinnerung, dass die Umsetzung eines Produkts schaltet auch die Reihenfolge der beiden transponierten-Objekte):
y^T = x^T * W^T + b^T
Das ist so ziemlich das, was kurz im Tutorial beschrieben wurde. Beachten Sie, dass y^T jetzt eine Matrix der Dimension 1xN (praktisch ein Zeilenvektor) ist, während x^T eine Matrix der Dimension 1xM (auch ein Zeilenvektor) ist. W^T ist eine Matrix der Dimension MxN. Im Tutorial haben sie nicht x^T oder y^T geschrieben, sondern einfach die Platzhalter nach dieser transponierten Gleichung definiert. Der einzige Punkt, der mir nicht klar ist, ist, warum sie b
nicht den "transponierten Weg" definiert haben. Ich nehme an, dass der Operator +
automatisch b
transponiert, wenn es notwendig ist, um die richtigen Abmessungen zu erhalten.
Der Rest ist jetzt ziemlich einfach: Wenn Sie Stapel größer als 1 Instanz haben, "stapeln" Sie mehrere der x
(1xM) Matrizen, sagen wir zu einer Matrix von Dimensionen (AxM) (wobei A die Losgröße ist)). b
wird hoffentlich automatisch auf diese Anzahl von Ereignissen übertragen (das heißt auf eine Matrix der Dimension (AxN).Wenn man dann verwenden
y^T = x^T * W^T^T + b,
Sie wird eine (AXN) Matrix der Ziele für jedes Element des Stapels erhalten.
Können Sie mehr Kontext bereitstellen? Woher hast du das zitiert? –
[link] (https://www.tensorflow.org/get_started/mnist/beginners) unter "Umsetzung der Regression". – ddgg007