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)
Yhdistä nämä kaksi esimerkkiä selittääksesi yksityiskohtaisesti akselin muutokset eri olosuhteissa.
Tensorien ulottuvuusoperaatioiden ymmärtäminen ja summaaminen tiettyjä akseleita pitkin PyTorchissa vie jonkin verran aikaa. Analysoidaan näitä operaatioita askel askeleelta kahden esimerkin kautta selittäen yksityiskohtaisesti akselin muutokset eri tilanteissa.
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]]])
Tämä on muoto (1, 4, 4)
tensoreista. Voimme ajatella sitä eränä, joka sisältää 4x4-matriisin.
x.sum(axis=1, keepdim=True)
Summa pitkin akselia 1 (eli toisen ulottuvuuden suunta, 4), pitäen mitat.
tensor([[[24, 28, 32, 36]]])
Muoto muuttuu (1, 1, 4)
。
x.sum(axis=1, keepdim=False)
Summa akselilla 1, mittasuhteita ei ole säilynyt.
tensor([[24, 28, 32, 36]])
Muoto muuttuu (1, 4)
。
x.sum(axis=0, keepdim=True)
Summa akselia 0 pitkin (eli ensimmäisen ulottuvuuden suunta, 1), pitäen mitat.
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Koska alkuperäisellä tensorilla on vain yksi elementti akselilla 0, tulos on sama kuin alkuperäinen tensori muotoineen (1, 4, 4)
。
x.sum(axis=0, keepdim=False)
Summa akselilla 0, ulottuvuus ei säily.
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Muoto muuttuu (4, 4)
。
x.sum(axis=2, keepdim=True)
Summa akselia 2 pitkin (eli kolmas ulottuvuus, 4:n suunta) pitäen mitat.
tensor([[[ 6],
[22],
[38],
[54]]])
Muoto muuttuu (1, 4, 1)
。
keepdim=True
Summaiset mitat säilyvät, tuloksen mittojen määrä pysyy ennallaan, mutta summattujen mittojen kooksi tulee 1.keepdim=False
Summaiset mitat poistetaan ja tuloksen mittojen lukumäärää vähennetään yhdellä.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]])
Tämä on muoto (4, 4)
tensoreista.
x.sum(axis=1, keepdim=True)
Summa pitkin akselia 1 (eli toisen ulottuvuuden suunta, 4), pitäen mitat.
tensor([[ 6],
[22],
[38],
[54]])
Muoto muuttuu (4, 1)
。
x.sum(axis=1, keepdim=False)
Summa akselilla 1, mittasuhteita ei ole säilynyt.
tensor([ 6, 22, 38, 54])
Muoto muuttuu (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]])
Tämä on kunkin elementin summa jaettuna sitä vastaavalla rivillä, mikä johtaa:
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]])
käyttää keepdim=True
Kun mitat säilytetään, summattu mitta tulee 1:ksi.käyttääkeepdim=False
Kun , summatut mitat poistetaan.
Miksi rivit luetellaan sarakkeiden sijasta, kun reshape(1, 4, 4) on käytössä Vain kun reshape(4, 4) on käytössä, rivit ovat rivejä?
Käydään ensin läpi peruskäsitteet:
(4, 4)
import torch
x = torch.arange(16).reshape(4, 4)
print(x)
Lähtö:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
Tämän tensorin muoto on (4, 4)
, edustaa 4x4-matriisia:
OKon vaakasuora:
[ 0, 1, 2, 3]
[ 4, 5, 6, 7]
[ 8, 9, 10, 11]
[12, 13, 14, 15]
Listaon pystysuora:
[ 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)
Lähtö:
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
Tämän tensorin muoto on (1, 4, 4)
, edustaa 1x4x4 kolmiulotteista tensoria:
1
, joka osoittaa erän koon.4
, edustaa rivien määrää (rivejä per matriisi).4
, edustaa sarakkeiden määrää (kunkin matriisin sarakkeet).(4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Lähtö:
tensor([[ 6],
[22],
[38],
[54]])
(1, 4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
Lähtö:
tensor([[[24, 28, 32, 36]]])
olla olemassa (1, 4, 4)
Kolmiulotteisessa tensorissa ensimmäinen ulottuvuus edustaa eräkokoa, joten näyttää siltä, että jokainen 4x4-matriisi käsitellään edelleen kaksiulotteisesti käytettäessä. Kuitenkin, koska erämitta lisätään, se toimii eri tavalla kuin kaksiulotteinen tensori summaoperaatiossa.
Erityisesti: