2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
import torch
x = torch.arange(16).reshape(1,4,4)
print(x)
print('--------')
a = x.sum(axis = 1,keepdim=True)
a2 = x.sum(axis = 1,keepdim=False)
a3 = x.sum(axis = 0,keepdim=True)
a4 = x.sum(axis = 0,keepdim=False)
a5 = x.sum(axis = 2,keepdim=True)
print(a)
print(a2)
print('----------')
print(a3)
print(a4)
print(a5)
import torch
x = torch.arange(16).reshape(4,4)
print(x)
print('--------')
a = x.sum(axis = 1,keepdim=True)
a2 = x.sum(axis = 1,keepdim=False)
print(a)
print(a2)
print(x/a)
Kombinieren Sie diese beiden Beispiele, um die Änderungen der Achse unter verschiedenen Umständen im Detail zu erklären.
Das Verständnis dimensionaler Operationen an Tensoren und der Summierung entlang bestimmter Achsen in PyTorch nimmt einige Zeit in Anspruch. Lassen Sie uns diese Vorgänge Schritt für Schritt anhand von zwei Beispielen analysieren und die Achsenänderungen in verschiedenen Situationen im Detail erläutern.
import torch
x = torch.arange(16).reshape(1, 4, 4)
print(x)
print('--------')
a = x.sum(axis=1, keepdim=True)
a2 = x.sum(axis=1, keepdim=False)
a3 = x.sum(axis=0, keepdim=True)
a4 = x.sum(axis=0, keepdim=False)
a5 = x.sum(axis=2, keepdim=True)
print(a)
print(a2)
print('----------')
print(a3)
print(a4)
print(a5)
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Dies ist eine Form von (1, 4, 4)
von Tensoren. Wir können es uns als einen Stapel vorstellen, der eine 4x4-Matrix enthält.
x.sum(axis=1, keepdim=True)
Summieren Sie entlang der Achse 1 (d. h. der Richtung der zweiten Dimension, 4) und behalten Sie dabei die Dimensionen bei.
tensor([[[24, 28, 32, 36]]])
Die Form wird (1, 1, 4)
。
x.sum(axis=1, keepdim=False)
Summe entlang Achse 1, keine Dimensionalität erhalten.
tensor([[24, 28, 32, 36]])
Die Form wird (1, 4)
。
x.sum(axis=0, keepdim=True)
Summieren Sie entlang der Achse 0 (d. h. der Richtung der ersten Dimension, 1) und behalten Sie dabei die Dimensionen bei.
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Da der ursprüngliche Tensor nur ein Element auf der Achse 0 hat, ist das Ergebnis dasselbe wie beim ursprünglichen Tensor, jedoch mit der Form (1, 4, 4)
。
x.sum(axis=0, keepdim=False)
Summe entlang der Achse 0, Dimensionalität bleibt nicht erhalten.
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Die Form wird (4, 4)
。
x.sum(axis=2, keepdim=True)
Summieren Sie entlang der Achse 2 (d. h. der dritten Dimension, der Richtung von 4) und behalten Sie dabei die Dimensionen bei.
tensor([[[ 6],
[22],
[38],
[54]]])
Die Form wird (1, 4, 1)
。
keepdim=True
Die summierten Dimensionen bleiben erhalten, die Anzahl der Dimensionen des Ergebnisses bleibt unverändert, aber die Größe der summierten Dimensionen wird 1.keepdim=False
Die summierten Dimensionen werden entfernt und die Anzahl der Dimensionen im Ergebnis wird um 1 reduziert.import torch
x = torch.arange(16).reshape(4, 4)
print(x)
print('--------')
a = x.sum(axis=1, keepdim=True)
a2 = x.sum(axis=1, keepdim=False)
print(a)
print(a2)
print(x/a)
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Dies ist eine Form von (4, 4)
von Tensoren.
x.sum(axis=1, keepdim=True)
Summieren Sie entlang der Achse 1 (d. h. der Richtung der zweiten Dimension, 4) und behalten Sie dabei die Dimensionen bei.
tensor([[ 6],
[22],
[38],
[54]])
Die Form wird (4, 1)
。
x.sum(axis=1, keepdim=False)
Summe entlang Achse 1, keine Dimensionalität erhalten.
tensor([ 6, 22, 38, 54])
Die Form wird (4,)
。
x / a
tensor([[0.0000, 0.1667, 0.3333, 0.5000],
[0.1818, 0.2273, 0.2727, 0.3182],
[0.2105, 0.2368, 0.2632, 0.2895],
[0.2222, 0.2407, 0.2593, 0.2778]])
Dies ist die Summe jedes Elements dividiert durch die entsprechende Zeile, was zu Folgendem führt:
tensor([[ 0/6, 1/6, 2/6, 3/6],
[ 4/22, 5/22, 6/22, 7/22],
[ 8/38, 9/38, 10/38, 11/38],
[12/54, 13/54, 14/54, 15/54]])
verwenden keepdim=True
Bei der Beibehaltung von Dimensionen beträgt die summierte Dimension 1.verwendenkeepdim=False
Wenn , werden die summierten Dimensionen entfernt.
Warum werden die Zeilen zu Spalten statt reshape(1, 4, 4)? Nur wenn reshape(4, 4) erscheinen die Zeilen als Zeilen?
Sehen wir uns zunächst die Grundkonzepte an:
(4, 4)
import torch
x = torch.arange(16).reshape(4, 4)
print(x)
Ausgabe:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Die Form dieses Tensors ist (4, 4)
, stellt eine 4x4-Matrix dar:
OKist horizontal:
[ 0, 1, 2, 3]
[ 4, 5, 6, 7]
[ 8, 9, 10, 11]
[12, 13, 14, 15]
Aufführenist vertikal:
[ 0, 4, 8, 12]
[ 1, 5, 9, 13]
[ 2, 6, 10, 14]
[ 3, 7, 11, 15]
(1, 4, 4)
x = torch.arange(16).reshape(1, 4, 4)
print(x)
Ausgabe:
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Die Form dieses Tensors ist (1, 4, 4)
, stellt einen dreidimensionalen 1x4x4-Tensor dar:
1
, Angabe der Chargengröße.4
, stellt die Anzahl der Zeilen dar (Zeilen pro Matrix).4
, stellt die Anzahl der Spalten (Spalten jeder Matrix) dar.(4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Ausgabe:
tensor([[ 6],
[22],
[38],
[54]])
(1, 4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Ausgabe:
tensor([[[24, 28, 32, 36]]])
existieren (1, 4, 4)
Im dreidimensionalen Tensor stellt die erste Dimension die Stapelgröße dar, sodass es den Anschein hat, dass jede 4x4-Matrix im Betrieb immer noch zweidimensional verarbeitet wird. Da jedoch eine Batch-Dimension hinzugefügt wird, verhält er sich bei der Summenoperation anders als ein zweidimensionaler Tensor.
Speziell: