PyTorch nudi modul torch.nn koji nam pomaže u stvaranju i obuci neuronske mreže. Prvo ćemo uvježbati osnovnu neuronsku mrežu na MNIST skupu podataka bez korištenja značajki iz ovih modela. Koristit ćemo samo osnovnu funkcionalnost tenzora PyTorcha, a zatim ćemo postupno dodavati jednu po jednu značajku iz torch.nn.
torch.nn pruža nam mnogo više klasa i modula za implementaciju i obuku neuronske mreže.
Paket nn sadrži sljedeće module i klase:
Da ne | Razred i modul | Opis |
---|---|---|
1. | baklja.nn.Parametar | To je tip tenzora koji se treba smatrati parametrom modula. |
2. | Kontejneri | |
1) baklja.nn.Modul | To je osnovna klasa za sve module neuronske mreže. | |
2) baklja.nn.Sekvencijalni | To je sekvencijalni spremnik u koji će se moduli dodavati istim redoslijedom kojim su proslijeđeni u konstruktoru. | |
3) baklja.nn.ModuleList | Ovo će zadržati podmodule na popisu. | |
4) baklja.nn.ModuleDict | Ovo će držati podmodule u direktoriju. | |
5) torch.nn.ParameterList | Ovo će držati parametre na popisu. | |
6) baklja.nn.parametarDict | Ovo će držati parametre u direktoriju. | |
3. | Konvolucijski slojevi | |
1) baklja.nn.Conv1d | Ovaj paket će se koristiti za primjenu 1D konvolucije preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
2) baklja.nn.Conv2d | Ovaj paket će se koristiti za primjenu 2D konvolucije preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
3) baklja.nn.Conv3d | Ovaj paket će se koristiti za primjenu 3D konvolucije preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
4) baklja.nn.ConvTranspose1d | Ovaj paket koristit će se za primjenu 1D transponiranog operatora konvolucije na ulaznu sliku sastavljenu od nekoliko ulaznih ravnina. | |
5) baklja.nn.ConvTranspose2d | Ovaj paket koristit će se za primjenu 2D transponiranog operatora konvolucije na ulaznu sliku sastavljenu od nekoliko ulaznih ravnina. | |
6) baklja.nn.ConvTranspose3d | Ovaj paket koristit će se za primjenu operatora 3D transponirane konvolucije na ulaznu sliku sastavljenu od nekoliko ulaznih ravnina. | |
7) baklja.nn.Rasklopiti | Koristi se za izdvajanje klizećih lokalnih blokova iz skupnog ulaznog tenzora. | |
8) baklja.nn.Preklop | Koristi se za kombiniranje niza kliznih lokalnih blokova u veliki sadržajni tenzor. | |
4. | Udruživanje slojeva | |
1) baklja.nn.MaxPool1d | Koristi se za primjenu 1D max skupljanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
2) baklja.nn.MaxPool2d | Koristi se za primjenu 2D max skupljanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
3) baklja.nn.MaxPool3d | Koristi se za primjenu 3D max skupljanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
4) baklja.nn.MaxUnpool1d | Koristi se za izračunavanje djelomičnog inverza MaxPool1d. | |
5) baklja.nn.MaxUnpool2d | Koristi se za izračunavanje djelomičnog inverza MaxPool2d. | |
6) baklja.nn.MaxUnpool3d | Koristi se za izračunavanje djelomičnog obrata MaxPool3d. | |
7) baklja.nn.AvgPool1d | Koristi se za primjenu 1D prosječnog skupljanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
8) baklja.nn.AvgPool2d | Koristi se za primjenu 2D prosječnog skupljanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
9) baklja.nn.AvgPool3d | Koristi se za primjenu 3D prosječnog skupljanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
10) baklja.nn.FractionalMaxPool2d | Koristi se za primjenu 2D frakcijskog maksimalnog skupljanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
11) baklja.nn.LPPool1d | Koristi se za primjenu 1D skupljanja prosječne snage na ulazni signal koji se sastoji od nekoliko ulaznih ravnina. | |
12) baklja.nn.LPPool2d | Koristi se za primjenu 2D skupljanja prosječne snage na ulazni signal koji se sastoji od nekoliko ulaznih ravnina. | |
13) baklja.nn.AdavtiveMaxPool1d | Koristi se za primjenu 1D prilagodljivog maksimalnog udruživanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
14) baklja.nn.AdavtiveMaxPool2d | Koristi se za primjenu 2D prilagodljivog maksimalnog skupljanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
15) baklja.nn.AdavtiveMaxPool3d | Koristi se za primjenu 3D prilagodljivog maksimalnog skupljanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
16) baklja.nn.AdavtiveAvgPool1d | Koristi se za primjenu 1D adaptivnog prosječnog skupljanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
17) baklja.nn.AdavtiveAvgPool2d | Koristi se za primjenu 2D adaptivnog prosječnog skupljanja preko ulaznog signala sastavljenog od nekoliko ulaznih ravnina. | |
18) baklja.nn.AdavtiveAvgPool3d | Koristi se za primjenu 3D prilagodljivog skupljanja prosjeka na ulazni signal sastavljen od nekoliko ulaznih ravnina. | |
5. | Slojevi podloge | |
1) baklja.nn.ReflectionPad1d | Ispunit će ulazni tenzor pomoću odraza ulazne granice. | |
2) baklja.nn.ReflactionPad2d | Ispunit će ulazni tenzor pomoću odraza ulazne granice. | |
3) torch.nn.ReplicationPad1 | Ispunit će ulazni tenzor koristeći replikaciju ulazne granice. | |
4) torch.nn.ReplicationPad2d | Ispunit će ulazni tenzor koristeći replikaciju ulazne granice. | |
5) torch.nn.ReplicationPad3d | Ispunit će ulazni tenzor koristeći replikaciju ulazne granice. | |
6) baklja.nn.ZeroPad2d | Ispunit će granice ulaznog tenzora nulom. | |
7) baklja.nn.ConstantPad1d | Ispunit će granice ulaznog tenzora konstantnom vrijednošću. | |
8) baklja.nn.ConstantPad2d | Ispunit će granice ulaznog tenzora konstantnom vrijednošću. | |
9) baklja.nn.ConstantPad3d | Ispunit će granice ulaznog tenzora konstantnom vrijednošću. | |
6. | Nelinearne aktivacije (ponderirani zbroj, nelinearnost) | |
1) baklja.nn.ELU | Koristit će se za primjenu funkcije po elementima: ELU(x)=max(0,x)+min(0,α*(exp(x)-1)) | |
2) baklja.nn.Hardshrink | Koristit će se za primjenu funkcije jakog skupljanja po elementima: | |
3) baklja.nn.LeakyReLU | Koristit će se za primjenu funkcije po elementima: LeakyReLu(x)=max(0,x) +negativni_nagib*min(0,x) | |
4) baklja.nn.LogSigmoid | Koristit će se za primjenu funkcije po elementima: | |
5) baklja.nn.MultiheadAttention | Koristi se kako bi se modelu omogućilo da prati informacije iz različitih reprezentativnih potprostora | |
6) baklja.nn.PReLU | Koristit će se za primjenu funkcije po elementima: PReLU(x)=max(0,x)+a*min(0,x) | |
7) baklja.nn.ReLU | Koristit će se za primjenu funkcije ispravljene linearne jedinice po elementima: ReLU(x)=max(0,x) | |
8) baklja.nn.ReLU6 | Koristit će se za primjenu funkcije po elementima: ReLU6(x)=min(max(0,x),6) | |
9) baklja.nn.RReLU | Koristit će se za primjenu randomizirane funkcije nepropusne ispravljene linearne jedinice, po elementima, kao što je opisano u radu: | |
10) baklja.nn.SELU | Koristit će se za primjenu funkcije po elementima kao: SELU(x)=skala*(max(0,x)+ min(0,a*(exp(x)-1))) Ovdje je α= 1,6732632423543772848170429916717 i skala = 1,0507009873554804934193349852946. | |
11) baklja.nn.CILJA | Koristit će se za primjenu funkcije po elementima kao: | |
12) baklja.nn.Sigmoid | Koristit će se za primjenu funkcije po elementima kao: | |
13) gorionik.nn.Softplus | Koristit će se za primjenu funkcije po elementima kao: | |
14) gorionik.nn.Softshrink | Koristit će se za primjenu funkcije laganog skupljanja po elementima kao: | |
15) baklja.nn.Softsign | Koristit će se za primjenu funkcije po elementima kao: | |
16) baklja.nn.Tanh | Koristit će se za primjenu funkcije po elementima kao: | |
17) baklja.nn.Tanhshrink | Koristit će se za primjenu funkcije po elementima kao: Tanhskupljenje(x)=x-Tanh(x) | |
18) baklja.nn.Prag | Koristit će se za pragove svakog elementa ulaznog tenzora. Prag je definiran kao: | |
7. | Nelinearne aktivacije (ostalo) | |
1) baklja.nn.Softmin | Koristi se za primjenu funkcije softmin na n-dimenzionalni ulazni tenzor za njihovu promjenu skale. Nakon toga, elementi n-dimenzionalnog izlaznog tenzora nalaze se u rasponu od 0, 1 i zbroju do 1. Softmin se definira kao: | |
2) plamenik.nn.Softmax | Koristi se za primjenu funkcije softmax na n-dimenzionalni ulazni tenzor za njihovu promjenu skale. Nakon toga, elementi n-dimenzionalnog izlaznog tenzora nalaze se u rasponu 0, 1 i zbroju do 1. Softmax se definira kao: | |
3) baklja.nn.Softmax2d | Koristi se za primjenu SoftMax nad značajkama na svaku prostornu lokaciju. | |
4) baklja.nn.LogSoftmax | Koristi se za primjenu funkcije LogSoftmax na n-dimenzionalni ulazni tenzor. Funkcija LofSoftmax može se definirati kao: | |
5) baklja.nn.AdaptiveLogSoftmaxWithLoss | To je strategija za obuku modela s velikim izlaznim prostorom. Vrlo je učinkovit kada je distribucija naljepnica izrazito neuravnotežena | |
8. | Slojevi normalizacije | |
1) plamenik.nn.BatchNorm1d | Koristi se za primjenu skupne normalizacije na 2D ili 3D ulaze. | |
2) plamenik.nn.BatchNorm2d | Koristi se za primjenu grupne normalizacije na 4D. | |
3) plamenik.nn.BatchNorm3d | Koristi se za primjenu skupne normalizacije na 5D ulaze. | |
4) baklja.nn.GrupnaNorma | Koristi se za primjenu grupne normalizacije na mini-seriju ulaza. | |
5) torch.nn.SyncBatchNorm | Koristi se za primjenu grupne normalizacije na n-dimenzionalne ulaze. | |
6) baklja.nn.InstanceNorm1d | Koristi se za primjenu normalizacije instance na 3D ulaz. | |
7) baklja.nn.InstanceNorm2d | Koristi se za primjenu normalizacije instance na 4D ulaz. | |
8) torch.nn.InstanceNorm3d | Koristi se za primjenu normalizacije instance na 5D ulaz. | |
9) baklja.nn.LayerNorm | Koristi se za primjenu normalizacije slojeva na mini-seriju ulaza. | |
10) torch.nn.LocalResponseNorm | Koristi se za primjenu lokalne normalizacije odziva na ulazni signal koji se sastoji od nekoliko ulaznih ravnina, gdje kanal zauzima drugu dimenziju. | |
9. | Ponavljajući slojevi | |
1) baklja.nn.RNN | Koristi se za primjenu višeslojnog Elman RNN-a s tanh ili ReLU nelinearnošću na ulaznu sekvencu. Svaki sloj izračunava sljedeću funkciju za svaki element u ulaznom nizu: ht=tanh(Wihxt+bih+Whhtt-1+bhh) | |
2) baklja.nn.LSTM | Koristi se za primjenu RNN višeslojne dugotrajne memorije (LSTM) na ulaznu sekvencu. Svaki sloj izračunava sljedeću funkciju za svaki element u ulaznom nizu: | |
3) baklja.nn.GRU | Koristi se za primjenu višeslojne zatvorene rekurentne jedinice (GRU) RNN na ulaznu sekvencu. Svaki sloj izračunava sljedeću funkciju za svaki element u ulaznom nizu: | |
4) baklja.nn.RNNCell | Koristi se za primjenu Elmanove RNN ćelije s tanh ili ReLU nelinearnošću na ulaznu sekvencu. Svaki sloj izračunava sljedeću funkciju za svaki element u ulaznom nizu: h'=tanh(Wihx+bih+Whhh+bhh) ReLU se koristi umjesto tanh | |
5) baklja.nn.LSTMCell | Koristi se za primjenu ćelije dugog kratkoročnog pamćenja (LSTM) na ulaznu sekvencu. Svaki sloj izračunava sljedeću funkciju za svaki element u ulaznom nizu: Gdje je σ sigmoidna funkcija, a * je Hadamardov produkt. | |
6) baklja.nn.GRUCell | Koristi se za primjenu ćelije rekurentne jedinice (GRU) na ulaznu sekvencu. Svaki sloj izračunava sljedeću funkciju za svaki element u ulaznom nizu: | |
10. | Linearni slojevi | |
1) baklja.nn.Identitet | To je operator identiteta rezerviranog mjesta koji je neosjetljiv na argumente. | |
2) baklja.nn.Linearni | Koristi se za primjenu linearne transformacije na dolazne podatke: y=xAT+b | |
3) baklja.nn.Bilinear | Koristi se za primjenu bilinearne transformacije na dolazne podatke: y=x1Sjekira2+b | |
jedanaest. | Ispadajući slojevi | |
1) baklja.nn.Ispadanje | Koristi se za regulaciju i sprječavanje koadaptacije neurona. Faktor od tijekom treninga skalira izlaz. To znači da modul izračunava funkciju identiteta tijekom evaluacije. | |
2) baklja.nn.Dropout2d | Ako su susjedni pikseli unutar mapa značajki u korelaciji, tada torch.nn.Dropout neće regulirati aktivacije i smanjit će efektivnu stopu učenja. U ovom slučaju, torch.nn.Dropout2d() se koristi za promicanje neovisnosti između mapa značajki. | |
3) baklja.nn.Dropout3d | Ako su susjedni pikseli unutar mapa značajki u korelaciji, tada torch.nn.Dropout neće regulirati aktivacije i smanjit će efektivnu stopu učenja. U ovom slučaju, torch.nn.Dropout2d () se koristi za promicanje neovisnosti između mapa značajki. | |
4) baklja.nn.AlphaDropout | Koristi se za primjenu Alpha Dropout preko ulaza. Alpha Dropout je vrsta Dropout-a koja održava svojstvo samonormalizacije. | |
12. | Rijetki slojevi | |
1) baklja.nn.Ugrađivanje | Koristi se za pohranjivanje umetanja riječi i njihovo dohvaćanje pomoću indeksa. Ulaz za modul je popis indeksa, a izlaz je odgovarajuća ugradnja riječi. | |
2) baklja.nn.EmbeddingBag | Koristi se za izračunavanje zbroja ili srednje vrijednosti 'vreća' ugrađivanja bez instanciranja srednjeg ugrađivanja. | |
13. | Funkcija udaljenosti | |
1) baklja.nn.Kosinusna sličnost | Vratit će sličnost kosinusa između x1 i x2, izračunatu duž dim. | |
2) baklja.nn.PairwiseDistance | Izračunava batch-wise pairwise udaljenost između vektora v1, v2 koristeći p-normu: | |
14. | Funkcija gubitka | |
1) baklja.nn.L1Gubitak | Koristi se za kriterij koji mjeri srednju apsolutnu pogrešku između svakog elementa u ulazu x i cilja y. Nesmanjeni gubitak može se opisati kao: l(x,y)=L={l1,...,ln},ln=|xn-in|, Gdje je N veličina serije. | |
2) baklja.nn.MSELoss | Koristi se za kriterij koji mjeri srednju kvadratnu pogrešku između svakog elementa u ulazu x i cilja y. Nesmanjeni gubitak može se opisati kao: l(x,y)=L={l1,...,ln},ln=(xn-in)2, Gdje je N veličina serije. | |
3) baklja.nn.CrossEntropyLoss | Ovaj kriterij kombinira nn.LogSoftmax() i nn.NLLLoss() u jednu klasu. Korisno je kada treniramo problem klasifikacije s C klasama. | |
4) baklja.nn.CTCLoss | Gubitak konekcionističke vremenske klasifikacije izračunava gubitak između kontinuiranog vremenskog niza i ciljnog niza. | |
5) baklja.nn.NLLLoss | Gubitak Negative Log-Likelihood koristi se za treniranje problema klasifikacije s C klasama. | |
6) baklja.nn.PoissonNLLLoss | Negativni logaritamski gubitak vjerojatnosti s Poissonovom distribucijom t target~Poisson(input)loss(input,target)=input-target*log(target!)he target. | |
7) baklja.nn.KLDivLoss | To je korisna mjera udaljenosti za kontinuiranu distribuciju, a također je korisna kada izvodimo izravnu regresiju nad prostorom kontinuirane distribucije izlaza. | |
8) baklja.nn.BCELoss | Koristi se za stvaranje kriterija koji mjeri binarnu unakrsnu entropiju između cilja i izlaza. Nesmanjeni gubitak može se opisati kao: l(x,y)=L={l1,...,ln},ln=-vn[in*logxn+ (1-gn)*log(1-xn)], Gdje je N veličina serije. | |
9) baklja.nn.BCEWithLogitsLoss | Kombinira sigmoidni sloj i BCELoss u jednu klasu. Možemo iskoristiti trik log-sum-exp za numeričku stabilnost kombiniranjem operacije u jedan sloj. | |
10) baklja.nn.MarginRankingLoss | Stvara kriterij koji mjeri gubitak zadanih ulaza x1, x2, dva 1D mini-serijskih tenzora i oznaku 1D mini-serijskih tenzora y koji sadrže 1 ili -1. Funkcija gubitka za svaki uzorak u mini-seriji je sljedeća: gubitak(x,y)=max(0,-y*(x1-x2)+margina | |
11) baklja.nn.HingeEmbeddingLoss | HingeEmbeddingLoss mjeri gubitak zadanog ulaznog tenzora x i tenzora oznaka y koji sadrže 1 ili -1. Koristi se za mjerenje jesu li dva ulaza slična ili različita. Funkcija gubitka je definirana kao: | |
12) baklja.nn.MultiLabelMarginLoss | Koristi se za stvaranje kriterija koji optimizira gubitak šarke za više klasa između ulaza x i izlaza y. | |
13) baklja.nn.SmoothL1Loss | Koristi se za stvaranje kriterija koji koristi kvadratni član ako apsolutna elementna pogreška padne ispod 1 i L1 član u suprotnom. Također je poznat kao Huberov gubitak: | |
14) baklja.nn.SoftMarginLoss | Koristi se za stvaranje kriterija koji optimizira logistički gubitak klasifikacije dvije klase između ulaznog tenzora x i ciljnog tenzora y koji sadrže 1 ili -1. | |
15) baklja.nn.MultiLabelSoftMarginLoss | Koristi se za stvaranje kriterija koji optimizira gubitak s više oznaka jedan protiv svih na temelju maksimalne entropije između ulaza x i cilja y veličine (N, C). | |
16) torch.nn.CosineEmbeddingLoss | Koristi se za stvaranje kriterija koji mjeri gubitak danih ulaznih tenzora x1, x2 i oznake tenzora y s vrijednostima 1 ili -1. Koristi se za mjerenje jesu li dva ulaza slična ili različita, koristeći kosinusnu udaljenost. | |
17) baklja.nn.MultiMarginLoss | Koristi se za stvaranje kriterija koji optimizira gubitak šarke klasifikacije u više klasa između ulaza x i izlaza y. | |
18) baklja.nn.TripletMarginLoss | Koristi se za stvaranje kriterija koji mjeri trostruki gubitak danih ulaznih tenzora x1, x2, x3 i margine s vrijednošću većom od 0. Koristi se za mjerenje relativne sličnosti između uzoraka. Trojka se sastoji od sidra, pozitivnog primjera i negativnog primjera. L(a,p,n)=max{d(ai,stri)-d(ai,ni)+margina,0} | |
petnaest. | Slojevi vizije | |
1) baklja.nn.PixelShuffle | Koristi se za preraspoređivanje elemenata u tenzor oblika (*,C×r2,H,W) na tenzor oblika (*,C,H×r,W,r) | |
2) baklja.nn.Uzorak | Koristi se za povećanje uzorkovanja zadanih višekanalnih 1D, 2D ili 3D podataka. | |
3) torch.nn.upsamplingNearest2d | Koristi se za primjenu 2D uzorkovanja najbližeg susjeda na ulazni signal koji je sastavljen od višestrukih ulaznih kanala. | |
4) torch.nn.UpsamplingBilinear2d | Koristi se za primjenu 2D bilinearnog povećanja uzorkovanja na ulazni signal koji je sastavljen od više ulaznih kanala. | |
16. | Paralelni slojevi podataka (više GPU, distribuirano) | |
1) baklja.nn.DataParallel | Koristi se za implementaciju paralelizma podataka na razini modula. | |
2) baklja.nn.DistributedDataParallel | Koristi se za implementaciju paralelizma distribuiranih podataka, koji se temelji na paketu torch.distributed na razini modula. | |
3) torch.nn.DistributedDataParallelCPU | Koristi se za implementaciju paralelizma distribuiranih podataka za CPU na razini modula. | |
17. | Komunalije | |
1) torch.nn.clip_grad_norm_ | Koristi se za rezanje norme gradijenta iterabilnog parametra. | |
2) torch.nn.clip_grad_value_ | Koristi se za rezanje norme gradijenta iterabilnog parametra na specificiranu vrijednost. | |
3) baklja.nn.parametri_za_vektor | Koristi se za pretvaranje parametara u jedan vektor. | |
4) torch.nn.vector_to_parameters | Koristi se za pretvaranje jednog vektora u parametre. | |
5) baklja.nn.težinska_norma | Koristi se za primjenu normalizacije težine na parametar u zadanom modulu. | |
6) baklja.nn.ukloni_normu_težine | Koristi se za uklanjanje normalizacije težine i ponovne parametrizacije iz modula. | |
7) baklja.nn.spektralna_norma | Koristi se za primjenu spektralne normalizacije na parametar u zadanom modulu. | |
8) torch.nn.PackedSequence | Koristit će se za držanje podataka i popisa batch_sizes pakiranog niza. | |
9) torch.nn.pack_padded_sequence | Koristi se za pakiranje tenzora koji sadrži podstavljene nizove promjenjive duljine. | |
10) torch.nn.pad_packed_sequence | Koristi se za upotpunjavanje paketa nizova promjenjive duljine. | |
11) torch.nn.pad_sequence | Koristi se za popunjavanje popisa tenzora promjenjive duljine s vrijednošću popunjavanja. | |
12) torch.nn.pack_sequence | Koristi se za pakiranje popisa tenzora promjenjive duljine | |
13) baklja.nn.ukloni_spektralnu_normu | Koristi se za uklanjanje spektralne normalizacije i ponovne parametrizacije iz modula. |
Referenca:
https://pytorch.org/docs/stable/nn.html