[PYTHON] Verstehe das Tensorprodukt (numpy.tensordot)

Ich habe Numpys Tensordot nicht katastrophal verstanden, aber ich habe das Gefühl, dass ich es verstehen könnte, wenn ich verschiedene Dinge recherchiere, also werde ich es mir notieren.

Dieses Thema

>>> import numpy as np
>>> a = np.arange(12).reshape(2,3,2)
>>> b = np.arange(48).reshape(3,2,8)
>>> c = np.tensordot(a,b, axes=([1,0], [0,1]))

>>> a
array([[[ 0,  1],
        [ 2,  3],
        [ 4,  5]],

       [[ 6,  7],
        [ 8,  9],
        [10, 11]]])

>>> b
array([[[ 0,  1,  2,  3,  4,  5,  6,  7],
        [ 8,  9, 10, 11, 12, 13, 14, 15]],

       [[16, 17, 18, 19, 20, 21, 22, 23],
        [24, 25, 26, 27, 28, 29, 30, 31]],

       [[32, 33, 34, 35, 36, 37, 38, 39],
        [40, 41, 42, 43, 44, 45, 46, 47]]])

>>> c
array([[ 800,  830,  860,  890,  920,  950,  980, 1010],
       [ 920,  956,  992, 1028, 1064, 1100, 1136, 1172]])

Was wir mit np.tensordot 1 machen: Generieren Sie eine Zwischenmatrix aus Matrix a

1.jpg

Das Bild ist, dass die Elemente in der Reihenfolge der zweiten Dimension und der ersten Dimension der Matrix a aufgenommen werden und eine Zwischenmatrix zur Berechnung erstellt wird. Die Form der Zwischenmatrix ist die Nummer der zweiten Dimension x die Nummer der ersten Dimension.

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3435353431382f64393430643066642d636365652d373531322d623936652d6638383065613963376462662e6a706567.png

In diesem Fall ist es ein Bild, dass eine Zwischenmatrix mit einer Form von 3 (Nummer der zweiten Dimension) x 2 (Nummer der ersten Dimension) erstellt wird.

3.jpg

4.jpg

Nehmen Sie in jedem Fall zuerst das obere linke Element auf.

Welches Element soll als nächstes aufgenommen werden? Da es in der Reihenfolge der zweiten Dimension und der ersten Dimension aufgenommen wird, Nehmen Sie zuerst in der Reihenfolge der zweiten Dimension auf.

5.jpg

Es wird so sein, wenn es in der Reihenfolge der zweiten Dimension aufgenommen wird.

Außerdem ist welches Element als nächstes aufzunehmen Ich habe es also in der Reihenfolge der zweiten Dimension aufgenommen Springe als nächstes zur "unteren" Insel in der Reihenfolge der ersten Dimension.

6.jpg

Nehmen Sie wie zuvor die Elemente in der zweitdimensionalen Reihenfolge auf der "unteren" Insel auf.

Sie haben jetzt eine 3x2-Matrix.

7.jpg

Machen Sie dasselbe für die "rechte" Seite.

Sie haben jetzt eine zweite 3x2-Matrix.

Als Ergebnis wird die folgende Struktur erstellt.

8.jpg

Was wir mit np.tensordot 2 machen: Generieren Sie eine Zwischenmatrix aus Matrix b

9.jpg

Das Bild zeigt, dass die Elemente in der Reihenfolge der ersten Dimension und der zweiten Dimension der Matrix b aufgenommen werden und eine Zwischenmatrix zur Berechnung erstellt wird.

Die Form der Zwischenmatrix ist die Nummer der ersten Dimension x die Nummer der zweiten Dimension.

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3435353431382f62613436636630632d326366352d323535362d313130312d3830383662343962366331612e6a706567.png

In diesem Fall ist es ein Bild, dass eine Zwischenmatrix mit einer Form von 3 (Nummer der ersten Dimension) x 2 (Nummer der zweiten Dimension) erstellt wird.

11.jpg

12.jpg

Nehmen Sie in jedem Fall zuerst das obere linke Element auf.

Welches Element soll als nächstes aufgenommen werden? Da es in der Reihenfolge der ersten Dimension und der zweiten Dimension aufgenommen wird, Als nächstes müssen Sie zur "unteren" Insel springen.

13.jpg

Es wird so sein, wenn es in der Reihenfolge der ersten Dimension aufgenommen wird.

Außerdem ist welches Element als nächstes aufzunehmen Ich habe es also in der Reihenfolge der ersten Dimension aufgenommen Als nächstes kehren wir in der Reihenfolge der zweiten Dimension zur "obersten" Insel zurück.

14.jpg

Nehmen Sie beim Neustart von ④ die Elemente wie zuvor in der Reihenfolge der ersten Dimension auf.

Sie haben jetzt eine 3x2-Matrix.

Machen Sie dasselbe für den Rest.

Sie sollten acht 3x2-Matrizen haben.

Als Ergebnis wird die folgende Struktur erstellt.

15.jpg

Was wir mit np.tensordot 3 machen: Nehmen Sie das "Produkt" der beiden Zwischenmatrizen aus der Matrix a und der Matrix b.

16.jpg

17.jpg

18.jpg

Es wurde zu einer 2-dimensionalen x 8-dimensionalen Matrix kompakt gemacht.

Was machst du konzeptionell?

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3435353431382f31656164613036652d663366612d393762392d363333392d3166666134353338336339342e6a706567.png

Durch die Berechnung dieser Dimensionen können wir diese Dimensionen reduzieren und gleichzeitig Informationen zu diesen Dimensionen beibehalten.

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3435353431382f66363639666637352d303037632d316534322d396333322d3035653630386663636638302e6a706567.png

Es wird auf die Form dieser verbleibenden Abmessungen verdichtet (dh 2 Abmessungen x 8 Abmessungen).

In diesem Sinne scheint eine solche Operation als Kontraktion bezeichnet zu werden. Ich interpretiere es als "Reduktion + Zusammenfassung".

Das Tensorprodukt scheint so zu sein.

Recommended Posts

Verstehe das Tensorprodukt (numpy.tensordot)
Tensor verstehen (2): Form
Verstehen Sie das Linux-Audit-System Audit
Tensor verstehen (3): Daten aus der realen Welt
Verstehen Sie den Inhalt der sklearn-Pipeline
Warum Super Intelli die Klasse nicht verstehen konnte