PyTorch poskytuje modul torch.nn, ktorý nám pomáha pri vytváraní a trénovaní neurónovej siete. Najprv natrénujeme základnú neurónovú sieť na dátovom súbore MNIST bez použitia akýchkoľvek funkcií z týchto modelov. Použijeme iba základnú funkciu tenzora PyTorch a potom postupne pridávame jednu funkciu z torch.nn.
torch.nn nám poskytuje oveľa viac tried a modulov na implementáciu a trénovanie neurónovej siete.
Balík nn obsahuje nasledujúce moduly a triedy:
Áno nie | Trieda a Modul | Popis |
---|---|---|
1. | pochodeň.nn.Parameter | Je to typ tenzora, ktorý treba považovať za parameter modulu. |
2. | Kontajnery | |
1) baterka.nn.Modul | Je to základná trieda pre všetky moduly neurónových sietí. | |
2) baterka.nn.Sekvenčné | Je to sekvenčný kontajner, do ktorého sa budú pridávať moduly v rovnakom poradí, ako sa odovzdávajú v konštruktore. | |
3) torch.nn.ModuleList | Toto bude obsahovať podmoduly v zozname. | |
4) baterka.nn.ModuleDict | Toto bude obsahovať podmoduly v adresári. | |
5) torch.nn.ParameterList | Toto bude obsahovať parametre v zozname. | |
6) horák.nn.parameterDict | Toto bude obsahovať parametre v adresári. | |
3. | Konvolučné vrstvy | |
1) pochodeň.nn.Conv1d | Tento balík sa použije na aplikáciu 1D konvolúcie cez vstupný signál zložený z niekoľkých vstupných rovín. | |
2) pochodeň.nn.Conv2d | Tento balík sa použije na aplikáciu 2D konvolúcie cez vstupný signál zložený z niekoľkých vstupných rovín. | |
3) pochodeň.nn.Conv3d | Tento balík sa použije na aplikáciu 3D konvolúcie cez vstupný signál zložený z niekoľkých vstupných rovín. | |
4) torch.nn.ConvTranspose1d | Tento balík sa použije na aplikáciu 1D transponovaného konvolučného operátora na vstupný obraz zložený z niekoľkých vstupných rovín. | |
5) torch.nn.ConvTranspose2d | Tento balík sa použije na aplikáciu 2D transponovaného konvolučného operátora na vstupný obraz zložený z niekoľkých vstupných rovín. | |
6) torch.nn.ConvTranspose3d | Tento balík sa použije na aplikáciu 3D transponovaného konvolučného operátora na vstupný obraz zložený z niekoľkých vstupných rovín. | |
7) pochodeň.nn.Rozvinúť | Používa sa na extrakciu posuvných lokálnych blokov z dávkového vstupného tenzora. | |
8) baterka.nn.Zložiť | Používa sa na spojenie radu posuvných lokálnych blokov do veľkého obsahujúceho tenzora. | |
4. | Združovacie vrstvy | |
1) baterka.nn.MaxPool1d | Používa sa na aplikáciu 1D max poolingu na vstupný signál zložený z niekoľkých vstupných rovín. | |
2) baterka.nn.MaxPool2d | Používa sa na aplikáciu 2D max poolingu na vstupný signál zložený z niekoľkých vstupných rovín. | |
3) baterka.nn.MaxPool3d | Používa sa na aplikáciu 3D max poolingu na vstupný signál zložený z niekoľkých vstupných rovín. | |
4) baterka.nn.MaxUnpool1d | Používa sa na výpočet čiastočnej inverznej hodnoty MaxPool1d. | |
5) baterka.nn.MaxUnpool2d | Používa sa na výpočet čiastočnej inverznej hodnoty MaxPool2d. | |
6) baterka.nn.MaxUnpool3d | Používa sa na výpočet čiastočnej inverznej hodnoty MaxPool3d. | |
7) torch.nn.AvgPool1d | Používa sa na aplikáciu 1D priemernej združovania na vstupný signál zložený z niekoľkých vstupných rovín. | |
8) torch.nn.AvgPool2d | Používa sa na aplikáciu 2D priemernej združovania na vstupný signál zložený z niekoľkých vstupných rovín. | |
9) torch.nn.AvgPool3d | Používa sa na aplikáciu 3D priemernej združovania na vstupný signál zložený z niekoľkých vstupných rovín. | |
10) torch.nn.FractionalMaxPool2d | Používa sa na aplikovanie 2D frakčného maxima na vstupný signál zložený z niekoľkých vstupných rovín. | |
11) baterka.nn.LPPool1d | Používa sa na aplikáciu 1D združovania priemerného výkonu na vstupný signál zložený z niekoľkých vstupných rovín. | |
12) baterka.nn.LPPool2d | Používa sa na aplikáciu 2D združovania priemerného výkonu na vstupný signál zložený z niekoľkých vstupných rovín. | |
13) baterka.nn.AdavtiveMaxPool1d | Používa sa na aplikáciu 1D adaptívneho max poolingu na vstupný signál zložený z niekoľkých vstupných rovín. | |
14) baterka.nn.AdavtiveMaxPool2d | Používa sa na aplikáciu 2D adaptívneho max poolingu na vstupný signál zložený z niekoľkých vstupných rovín. | |
15) torch.nn.AdavtiveMaxPool3d | Používa sa na aplikáciu 3D adaptívneho max poolingu na vstupný signál zložený z niekoľkých vstupných rovín. | |
16) torch.nn.AdavtiveAvgPool1d | Používa sa na aplikáciu 1D adaptívneho priemeru na vstupný signál zložený z niekoľkých vstupných rovín. | |
17) torch.nn.AdavtiveAvgPool2d | Používa sa na aplikáciu 2D adaptívneho priemeru na vstupný signál zložený z niekoľkých vstupných rovín. | |
18) torch.nn.AdavtiveAvgPool3d | Používa sa na aplikáciu 3D adaptívneho priemeru na vstupný signál zložený z niekoľkých vstupných rovín. | |
5. | Výplňové vrstvy | |
1) baterka.nn.ReflectionPad1d | Doplní vstupný tenzor pomocou odrazu vstupnej hranice. | |
2) baterka.nn.ReflactionPad2d | Doplní vstupný tenzor pomocou odrazu vstupnej hranice. | |
3) torch.nn.ReplicationPad1 | Vyplní vstupný tenzor pomocou replikácie vstupnej hranice. | |
4) torch.nn.ReplicationPad2d | Vyplní vstupný tenzor pomocou replikácie vstupnej hranice. | |
5) torch.nn.ReplicationPad3d | Vyplní vstupný tenzor pomocou replikácie vstupnej hranice. | |
6) baterka.nn.ZeroPad2d | Hranice vstupného tenzora vyplní nulou. | |
7) baterka.nn.ConstantPad1d | Doplní hranice vstupného tenzora konštantnou hodnotou. | |
8) baterka.nn.ConstantPad2d | Doplní hranice vstupného tenzora konštantnou hodnotou. | |
9) baterka.nn.ConstantPad3d | Doplní hranice vstupného tenzora konštantnou hodnotou. | |
6. | Nelineárne aktivácie (vážený súčet, nelinearita) | |
1) baterka.nn.ELU | Použije sa na použitie funkcie po prvkoch: ELU(x)=max(0,x)+min(0,α*(exp(x)-1)) | |
2) baterka.nn.Hardshrink | Používa sa na aplikáciu funkcie tvrdého zmršťovania po prvkoch: | |
3) pochodeň.nn.LeakyReLU | Použije sa na použitie funkcie po prvkoch: LeakyReLu(x)=max(0,x) +negative_slope*min(0,x) | |
4) torch.nn.LogSigmoid | Použije sa na použitie funkcie po prvkoch: | |
5) baterka.nn.MultiheadPozor | Používa sa na umožnenie modelu venovať sa informáciám z rôznych reprezentačných podpriestorov | |
6) pochodeň.nn.PReLU | Použije sa na aplikáciu funkcie po prvkoch: PReLU(x)=max(0,x)+a*min(0,x) | |
7) pochodeň.nn.ReLU | Použije sa na použitie prvkov funkcie rektifikovanej lineárnej jednotky: ReLU(x)=max(0,x) | |
8) baterka.nn.ReLU6 | Použije sa na aplikáciu funkcie po prvkoch: ReLU6(x)=min(max(0,x),6) | |
9) pochodeň.nn.RReLU | Použije sa na aplikáciu náhodnej netesnej funkcie rektifikovaných lineárnych jednotiek, po prvkoch, ako je opísané v článku: | |
10) pochodeň.nn.SELU | Použije sa na použitie funkcie po prvkoch ako: SELU(x)=mierka*(max(0,x)+ min(0,a*(exp(x)-1))) Tu α= 1,6732632423543772848170429916717 a mierka = 1,0507009873554804934193349852946. | |
11) pochodeň.nn.CIEĽ | Použije sa na použitie funkcie po prvkoch ako: | |
12) pochodeň.nn.Sigmoid | Použije sa na použitie funkcie po prvkoch ako: | |
13) baterka.nn.Softplus | Použije sa na použitie funkcie po prvkoch ako: | |
14) baterka.nn.Softshrink | Používa sa na aplikáciu funkcie mäkkého zmršťovania po jednotlivých prvkoch ako: | |
15) torch.nn.Softsign | Použije sa na použitie funkcie po prvkoch ako: | |
16) pochodeň.nn.Tanh | Použije sa na použitie funkcie po prvkoch ako: | |
17) pochodeň.nn.Tanhshrink | Použije sa na použitie funkcie po prvkoch ako: Tanhshrink(x)=x-Tanh(x) | |
18) baterka.nn.Threshold | Používa sa na prahové hodnoty každého prvku vstupného tenzora. Prah je definovaný ako: | |
7. | Nelineárne aktivácie (iné) | |
1) baterka.nn.Softmin | Používa sa na aplikáciu funkcie softmin na n-rozmerný vstup Tensor, aby sa zmenila ich mierka. Potom prvky n-rozmerného výstupu Tensor ležia v rozsahu 0, 1 a súčet do 1. Softmin je definovaný ako: | |
2) horák.nn.Softmax | Používa sa na aplikáciu funkcie softmax na n-rozmerný vstup Tensor, aby sa zmenila ich mierka. Potom prvky n-rozmerného výstupu Tensor ležia v rozsahu 0, 1 a súčet do 1. Softmax je definovaný ako: | |
3) baterka.nn.Softmax2d | Používa sa na aplikáciu funkcií SoftMax na každé priestorové umiestnenie. | |
4) baterka.nn.LogSoftmax | Používa sa na aplikáciu funkcie LogSoftmax na n-rozmerný vstup Tensor. Funkciu LofSoftmax možno definovať ako: | |
5) torch.nn.AdaptiveLogSoftmaxWithLoss | Je to stratégia pre tréning modelov s veľkými výstupnými priestormi. Je veľmi efektívny, keď je distribúcia štítkov značne nevyvážená | |
8. | Normalizačné vrstvy | |
1) horák.nn.BatchNorm1d | Používa sa na aplikáciu dávkovej normalizácie cez 2D alebo 3D vstupy. | |
2) torch.nn.BatchNorm2d | Používa sa na aplikáciu dávkovej normalizácie cez 4D. | |
3) torch.nn.BatchNorm3d | Používa sa na aplikáciu dávkovej normalizácie cez 5D vstupy. | |
4) baterka.nn.GroupNorm | Používa sa na aplikáciu skupinovej normalizácie na mini-dávku vstupov. | |
5) torch.nn.SyncBatchNorm | Používa sa na aplikáciu dávkovej normalizácie na n-rozmerné vstupy. | |
6) horák.nn.InstanceNorm1d | Používa sa na aplikáciu normalizácie inštancie na 3D vstup. | |
7) horák.nn.InstanceNorm2d | Používa sa na aplikáciu normalizácie inštancie na 4D vstup. | |
8) baterka.nn.InstanceNorm3d | Používa sa na aplikáciu normalizácie inštancie na 5D vstup. | |
9) horák.nn.LayerNorm | Používa sa na aplikáciu normalizácie vrstiev na mini-dávku vstupov. | |
10) torch.nn.LocalResponseNorm | Používa sa na aplikáciu normalizácie lokálnej odozvy na vstupný signál, ktorý sa skladá z niekoľkých vstupných rovín, kde kanál zaberá druhý rozmer. | |
9. | Opakujúce sa vrstvy | |
1) pochodeň.nn.RNN | Používa sa na aplikáciu viacvrstvového Elman RNN s tanh alebo ReLU nelinearitou na vstupnú sekvenciu. Každá vrstva vypočíta nasledujúcu funkciu pre každý prvok vo vstupnej sekvencii: ht=tanh(WichXt+bich+Whhtt-1+bhh) | |
2) baterka.nn.LSTM | Používa sa na aplikáciu viacvrstvovej dlhodobej krátkodobej pamäte (LSTM) RNN na vstupnú sekvenciu. Každá vrstva vypočíta nasledujúcu funkciu pre každý prvok vo vstupnej sekvencii: | |
3) pochodeň.nn.GRU | Používa sa na aplikáciu viacvrstvovej hradlovej rekurentnej jednotky (GRU) RNN na vstupnú sekvenciu. Každá vrstva vypočíta nasledujúcu funkciu pre každý prvok vo vstupnej sekvencii: | |
4) pochodeň.nn.RNNCell | Používa sa na aplikáciu bunky Elman RNN s nelinearitou tanh alebo ReLU na vstupnú sekvenciu. Každá vrstva vypočíta nasledujúcu funkciu pre každý prvok vo vstupnej sekvencii: h'=tanh(Wichx+bich+Whhh+bhh) ReLU sa používa namiesto tanh | |
5) pochodeň.nn.LSTMCell | Používa sa na aplikáciu bunky dlhej krátkodobej pamäte (LSTM) na vstupnú sekvenciu. Každá vrstva vypočíta nasledujúcu funkciu pre každý prvok vo vstupnej sekvencii: Kde σ je sigmoidná funkcia a * je Hadamardov súčin. | |
6) baterka.nn.GRUCell | Používa sa na aplikáciu bunky hradlovej rekurentnej jednotky (GRU) na vstupnú sekvenciu. Každá vrstva vypočíta nasledujúcu funkciu pre každý prvok vo vstupnej sekvencii: | |
10. | Lineárne vrstvy | |
1) pochodeň.nn.Identita | Je to zástupný operátor identity, ktorý nie je citlivý na argumenty. | |
2) baterka.nn.Lineárne | Používa sa na aplikáciu lineárnej transformácie na prichádzajúce údaje: y=xAT+b | |
3) baterka.nn.Bilineárna | Používa sa na aplikáciu bilineárnej transformácie na prichádzajúce údaje: y=x1Ax2+b | |
jedenásť. | Výpadkové vrstvy | |
1) baterka.nn.Dropout | Používa sa na regularizáciu a prevenciu spoločnej adaptácie neurónov. Faktorom počas tréningu škáluje výstup. To znamená, že modul počas vyhodnocovania vypočítava funkciu identity. | |
2) baterka.nn.Dropout2d | Ak sú susedné pixely v mapách prvkov korelované, potom torch.nn.Dropout neupraví aktivácie a zníži efektívnu rýchlosť učenia. V tomto prípade sa torch.nn.Dropout2d() používa na podporu nezávislosti medzi mapami prvkov. | |
3) baterka.nn.Dropout3d | Ak sú susedné pixely v mapách prvkov korelované, potom torch.nn.Dropout neupraví aktivácie a zníži efektívnu rýchlosť učenia. V tomto prípade sa torch.nn.Dropout2d () používa na podporu nezávislosti medzi mapami objektov. | |
4) baterka.nn.AlphaDropout | Používa sa na aplikáciu Alpha Dropout nad vstupom. Alpha Dropout je typ Dropout, ktorý si zachováva samonormalizačnú vlastnosť. | |
12. | Riedke vrstvy | |
1) baterka.nn.Vloženie | Používa sa na ukladanie vložených slov a ich získavanie pomocou indexov. Vstupom pre modul je zoznam indexov a výstupom je zodpovedajúce vloženie slova. | |
2) baterka.nn.EmbeddingBag | Používa sa na výpočet súčtu alebo priemeru „vreciek“ vkladania bez vytvárania inštancie stredného vloženia. | |
13. | Funkcia vzdialenosti | |
1) pochodeň.nn.CosinePodobnosť | Vráti kosínusovú podobnosť medzi x1 a x2, vypočítanú podľa dim. | |
2) baterka.nn.PairwiseDistance | Vypočítava dávkovo párovú vzdialenosť medzi vektormi v1, v2 pomocou p-normy: | |
14. | Stratová funkcia | |
1) pochodeň.nn.L1Strata | Používa sa na kritérium, ktoré meria strednú absolútnu chybu medzi každým prvkom na vstupe x a cieľom y. Nezníženú stratu možno opísať takto: l(x,y)=L={l1,...,ln},ln=|xn-an|, Kde N je veľkosť šarže. | |
2) baterka.nn.MSELoss | Používa sa na kritérium, ktoré meria strednú štvorcovú chybu medzi každým prvkom na vstupe x a cieľom y. Nezníženú stratu možno opísať takto: l(x,y)=L={l1,...,ln},ln=(xn-an)2, Kde N je veľkosť šarže. | |
3) torch.nn.CrossEntropyLoss | Toto kritérium kombinuje nn.LogSoftmax() a nn.NLLLoss() do jednej jedinej triedy. Je to užitočné, keď trénujeme klasifikačný problém s triedami C. | |
4) baterka.nn.CTCLoss | Strata Connectionist Temporal Classification počíta stratu medzi súvislým časovým radom a cieľovou sekvenciou. | |
5) pochodeň.nn.NLLLoss | Strata negatívnej logaritmickej pravdepodobnosti sa používa na trénovanie klasifikačného problému s triedami C. | |
6) pochodeň.nn.PoissonNLLLoss | Záporná logaritmická pravdepodobnostná strata s Poissonovým rozdelením t cieľ~Poisson(vstup)strata(vstup,cieľ)=vstupný-cieľ*log(cieľ!)cieľ. | |
7) pochodeň.nn.KLDivLoss | Je to užitočná miera vzdialenosti pre spojitú distribúciu a je tiež užitočná, keď vykonávame priamu regresiu cez priestor spojitej distribúcie výstupu. | |
8) horák.nn.BCELoss | Používa sa na vytvorenie kritéria, ktoré meria binárnu krížovú entropiu medzi cieľom a výstupom. Nezníženú stratu možno opísať takto: l(x,y)=L={l1,...,ln},ln=-vn[an*logxn+ (1-rn)*log(1-xn)], Kde N je veľkosť šarže. | |
9) pochodeň.nn.BCCEWithLogitsLoss | Spája sigmoidnú vrstvu a BCELoss v jednej triede. Kombináciou operácie do jednej vrstvy môžeme využiť trik log-sum-exp na numerickú stabilitu. | |
10) torch.nn.MarginRankingLoss | Vytvára kritérium, ktoré meria stratu daných vstupov x1, x2, dvoch 1D mini-batch tenzorov a štítkového 1D mini-batch tenzora y, ktoré obsahujú 1 alebo -1. Stratová funkcia pre každú vzorku v minidávke je nasledovná: strata(x,y)=max(0,-y*(x1-X2)+marža | |
11) torch.nn.HingeEmbeddingLoss | HingeEmbeddingLoss meria stratu daného vstupného tenzora x a označenia tenzora y, ktoré obsahujú 1 alebo -1. Používa sa na meranie, či sú dva vstupy podobné alebo rozdielne. Stratová funkcia je definovaná ako: | |
12) baterka.nn.MultiLabelMarginLoss | Používa sa na vytvorenie kritéria, ktoré optimalizuje stratu závesu viacerých tried medzi vstupom x a výstupom y. | |
13) baterka.nn.SmoothL1Loss | Používa sa na vytvorenie kritéria, ktoré používa druhú mocninu, ak absolútna chyba prvkov klesne pod 1 a inak výraz L1. Je tiež známa ako Huberova strata: | |
14) torch.nn.SoftMarginLoss | Používa sa na vytvorenie kritéria, ktoré optimalizuje logistickú stratu klasifikácie dvoch tried medzi vstupným tenzorom x a cieľovým tenzorom y, ktoré obsahujú 1 alebo -1. | |
15) torch.nn.MultiLabelSoftMarginLoss | Používa sa na vytvorenie kritéria, ktoré optimalizuje stratu viacerých značiek jedna proti všetkým na základe maximálnej entropie medzi vstupom x a cieľovou veľkosťou y (N, C). | |
16) torch.nn.CosineEmbeddingLoss | Používa sa na vytvorenie kritéria, ktoré meria stratu daných vstupných tenzorov x1, x2 a tenzorového označenia y s hodnotami 1 alebo -1. Používa sa na meranie, či sú dva vstupy podobné alebo odlišné, pomocou kosínusovej vzdialenosti. | |
17) baterka.nn.MultiMarginLoss | Používa sa na vytvorenie kritéria, ktoré optimalizuje stratu závesu klasifikácie viacerých tried medzi vstupom x a výstupom y. | |
18) torch.nn.TripletMarginLoss | Používa sa na vytvorenie kritéria, ktoré meria tripletovú stratu daného vstupného tenzora x1, x2, x3 a maržu s hodnotou väčšou ako 0. Používa sa na meranie relatívnej podobnosti medzi vzorkami. Trojica sa skladá z kotvy, pozitívneho príkladu a negatívneho príkladu. L(a,p,n)=max{d(ai,si)-d(ai,ni)+marža,0} | |
pätnásť. | Vrstvy videnia | |
1) baterka.nn.PixelShuffle | Používa sa na preusporiadanie prvkov v tenzore tvaru (*,C×r2,H,W) na tenzor tvaru (*,C,H×r,W,r) | |
2) baterka.nn.Upsample | Používa sa na prevzorkovanie daných viackanálových 1D, 2D alebo 3D dát. | |
3) torch.nn.upsamplingNearest2d | Používa sa na aplikáciu 2D prevzorkovania najbližšieho suseda na vstupný signál, ktorý sa skladá z viacerých vstupných kanálov. | |
4) torch.nn.UpsamplingBilinear2d | Používa sa na aplikáciu 2D bilineárneho prevzorkovania na vstupný signál, ktorý sa skladá z viacerých vstupných kanálov. | |
16. | DataParallel vrstvy (multi-GPU, distribuované) | |
1) baterka.nn.DataParallel | Používa sa na implementáciu paralelizmu údajov na úrovni modulu. | |
2) torch.nn.DistributedDataParallel | Používa sa na implementáciu distribuovaného dátového paralelizmu, ktorý je založený na balíku torch.distributed na úrovni modulu. | |
3) torch.nn.DistributedDataParallelCPU | Používa sa na implementáciu distribuovaného dátového paralelizmu pre CPU na úrovni modulu. | |
17. | Verejné služby | |
1) torch.nn.clip_grad_norm_ | Používa sa na orezanie normy gradientu iterovateľných parametrov. | |
2) torch.nn.clip_grad_value_ | Používa sa na orezanie normy gradientu iterovateľných parametrov na zadanú hodnotu. | |
3) torch.nn.parameters_to_vector | Používa sa na prevod parametrov na jeden vektor. | |
4) torch.nn.vector_to_parameters | Používa sa na prevod jedného vektora na parametre. | |
5) pochodeň.nn.norma hmotnosti | Používa sa na aplikáciu normalizácie hmotnosti na parameter v danom module. | |
6) torch.nn.remove_weight_norm | Používa sa na odstránenie normalizácie hmotnosti a preparametrizácie z modulu. | |
7) pochodeň.nn.spektrálna_norma | Slúži na aplikáciu spektrálnej normalizácie na parameter v danom module. | |
8) torch.nn.PackedSequence | Použije sa na uchovávanie údajov a zoznamu veľkostí batch_sizes zbalenej sekvencie. | |
9) torch.nn.pack_padded_sequence | Používa sa na balenie tenzoru obsahujúceho vyplnené sekvencie s premenlivou dĺžkou. | |
10) torch.nn.pad_packed_sequence | Používa sa na vyplnenie zbalenej dávky sekvencií s premenlivou dĺžkou. | |
11) torch.nn.pad_sequence | Používa sa na vyplnenie zoznamu tenzorov premenlivej dĺžky s hodnotou vyplnenia. | |
12) torch.nn.pack_sequence | Používa sa na balenie zoznamu tenzorov s premenlivou dĺžkou | |
13) torch.nn.remove_spectral_norm | Používa sa na odstránenie spektrálnej normalizácie a reparametrizácie z modulu. |
Referencia:
https://pytorch.org/docs/stable/nn.html