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)
Combinez ces deux exemples pour expliquer en détail les changements d’axe dans différentes circonstances.
Comprendre les opérations dimensionnelles sur les tenseurs et la sommation le long d'axes spécifiques dans PyTorch prend un peu de temps. Analysons ces opérations étape par étape à travers deux exemples, expliquant en détail les changements d'axe dans différentes situations.
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]]])
C'est une forme de (1, 4, 4)
de tenseurs. On peut le considérer comme un lot contenant une matrice 4x4.
x.sum(axis=1, keepdim=True)
Sommez le long de l'axe 1 (c'est-à-dire la direction de la deuxième dimension, 4), en conservant les dimensions.
tensor([[[24, 28, 32, 36]]])
La forme devient (1, 1, 4)
。
x.sum(axis=1, keepdim=False)
Somme le long de l'axe 1, aucune dimensionnalité préservée.
tensor([[24, 28, 32, 36]])
La forme devient (1, 4)
。
x.sum(axis=0, keepdim=True)
Somme le long de l'axe 0 (c'est-à-dire la direction de la première dimension, 1), en conservant les dimensions.
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Étant donné que le tenseur d'origine n'a qu'un seul élément sur l'axe 0, le résultat est le même que le tenseur d'origine, avec une forme (1, 4, 4)
。
x.sum(axis=0, keepdim=False)
Somme le long de l'axe 0, la dimensionnalité n'est pas conservée.
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
La forme devient (4, 4)
。
x.sum(axis=2, keepdim=True)
Sommez le long de l'axe 2 (c'est-à-dire la troisième dimension, la direction de 4), en conservant les dimensions.
tensor([[[ 6],
[22],
[38],
[54]]])
La forme devient (1, 4, 1)
。
keepdim=True
Les dimensions additionnées seront conservées, le nombre de dimensions du résultat reste inchangé, mais la taille des dimensions additionnées devient 1.keepdim=False
Les dimensions additionnées seront supprimées et le nombre de dimensions dans le résultat sera réduit de 1.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]])
C'est une forme de (4, 4)
de tenseurs.
x.sum(axis=1, keepdim=True)
Sommez le long de l'axe 1 (c'est-à-dire la direction de la deuxième dimension, 4), en conservant les dimensions.
tensor([[ 6],
[22],
[38],
[54]])
La forme devient (4, 1)
。
x.sum(axis=1, keepdim=False)
Somme le long de l'axe 1, aucune dimensionnalité préservée.
tensor([ 6, 22, 38, 54])
La forme devient (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]])
Il s'agit de la somme de chaque élément divisée par sa ligne correspondante, ce qui donne :
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]])
utiliser keepdim=True
Lors de la gestion des dimensions, la dimension additionnée devient 1.utiliserkeepdim=False
Lorsque , les dimensions additionnées sont supprimées.
Pourquoi les lignes deviennent-elles des colonnes au lieu de reshape(1, 4, 4) ? Ce n'est que lorsque reshape(4, 4) que les lignes apparaissent sous forme de lignes ?
Revoyons d’abord les concepts de base :
(4, 4)
import torch
x = torch.arange(16).reshape(4, 4)
print(x)
Sortir:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
La forme de ce tenseur est (4, 4)
, représente une matrice 4x4 :
D'ACCORDest horizontal :
[ 0, 1, 2, 3]
[ 4, 5, 6, 7]
[ 8, 9, 10, 11]
[12, 13, 14, 15]
Listeest vertical :
[ 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)
Sortir:
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
La forme de ce tenseur est (1, 4, 4)
, représente un tenseur tridimensionnel 1x4x4 :
1
, indiquant la taille du lot.4
, représente le nombre de lignes (lignes par matrice).4
, représente le nombre de colonnes (colonnes de chaque matrice).(4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Sortir:
tensor([[ 6],
[22],
[38],
[54]])
(1, 4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Sortir:
tensor([[[24, 28, 32, 36]]])
exister (1, 4, 4)
Dans le tenseur tridimensionnel, la première dimension représente la taille du lot, il semble donc que chaque matrice 4x4 soit toujours traitée de manière bidimensionnelle lors du fonctionnement. Cependant, étant donné qu'une dimension de lot est ajoutée, elle se comporte différemment d'un tenseur bidimensionnel dans l'opération de somme.
Spécifiquement: