PyTorch leverer torch.nn-modulet for at hjælpe os med at skabe og træne det neurale netværk. Vi vil først træne det grundlæggende neurale netværk på MNIST-datasættet uden at bruge nogen funktioner fra disse modeller. Vi vil kun bruge den grundlæggende PyTorch-tensorfunktionalitet, og derefter tilføjer vi trinvist én funktion fra torch.nn ad gangen.
torch.nn giver os mange flere klasser og moduler til at implementere og træne det neurale netværk.
Pakken nn indeholder følgende moduler og klasser:
Ja Nej | Klasse og modul | Beskrivelse |
---|---|---|
1. | fakkel.nn.Parameter | Det er en type tensor, der skal betragtes som en modulparameter. |
2. | Containere | |
1) fakkel.nn.Modul | Det er en basisklasse for alle neurale netværksmoduler. | |
2) fakkel.nn.Sekventiel | Det er en sekventiel beholder, hvor moduler tilføjes i samme rækkefølge, som de sendes i konstruktøren. | |
3) torch.nn.ModuleList | Dette vil indeholde undermoduler i en liste. | |
4) torch.nn.ModuleDict | Dette vil rumme undermoduler i en mappe. | |
5) torch.nn.ParameterList | Dette vil holde parametrene på en liste. | |
6) torch.nn.parameterDict | Dette vil opbevare parametrene i en mappe. | |
3. | Konvolutionslag | |
1) fakkel.nn.Conv1d | Denne pakke vil blive brugt til at anvende en 1D-foldning over et inputsignal, der er sammensat af flere inputplaner. | |
2) fakkel.nn.Conv2d | Denne pakke vil blive brugt til at anvende en 2D-foldning over et inputsignal, der består af flere inputplaner. | |
3) torch.nn.Conv3d | Denne pakke vil blive brugt til at anvende en 3D-foldning over et inputsignal sammensat af flere inputplaner. | |
4) torch.nn.ConvTranspose1d | Denne pakke vil blive brugt til at anvende en 1D transponeret foldningsoperator over et inputbillede, der består af flere inputplaner. | |
5) torch.nn.ConvTranspose2d | Denne pakke vil blive brugt til at anvende en 2D-transponeret foldningsoperator over et inputbillede, der består af flere inputplaner. | |
6) torch.nn.ConvTranspose3d | Denne pakke vil blive brugt til at anvende en 3D-transponeret foldningsoperator over et inputbillede, der består af flere inputplaner. | |
7) fakkel.nn.Udfolde sig | Det bruges til at udtrække glidende lokale blokke fra en batchet inputtensor. | |
8) fakkel.nn.Fold | Det bruges til at kombinere en række glidende lokale blokke til en stor indeholdende tensor. | |
4. | Samling af lag | |
1) fakkel.nn.MaxPool1d | Det bruges til at anvende en 1D max pooling over et inputsignal, der består af flere inputplaner. | |
2) fakkel.nn.MaxPool2d | Det bruges til at anvende en 2D max pooling over et inputsignal, der består af flere inputplaner. | |
3) fakkel.nn.MaxPool3d | Det bruges til at anvende en 3D max pooling over et inputsignal, der består af flere inputplaner. | |
4) fakkel.nn.MaxUnpool1d | Det bruges til at beregne den partielle inverse af MaxPool1d. | |
5) fakkel.nn.MaxUnpool2d | Det bruges til at beregne den delvise inverse af MaxPool2d. | |
6) fakkel.nn.MaxUnpool3d | Det bruges til at beregne den delvise inverse af MaxPool3d. | |
7) fakkel.nn.AvgPool1d | Det bruges til at anvende en 1D-gennemsnitlig pooling over et inputsignal, der består af flere inputplaner. | |
8) torch.nn.AvgPool2d | Det bruges til at anvende en 2D-gennemsnitspooling over et inputsignal, der består af flere inputplaner. | |
9) torch.nn.AvgPool3d | Det bruges til at anvende en 3D-gennemsnitspooling over et inputsignal, der består af flere inputplaner. | |
10) fakkel.nn.FractionalMaxPool2d | Det bruges til at anvende en 2D fraktioneret max pooling over et inputsignal, der består af flere inputplaner. | |
11) torch.nn.LPPool1d | Det bruges til at anvende en 1D-effektgennemsnitlig pooling over et inputsignal, der består af flere inputplaner. | |
12) torch.nn.LPPool2d | Det bruges til at anvende en 2D-effektgennemsnitlig pooling over et inputsignal, der består af flere inputplaner. | |
13) fakkel.nn.AdavtiveMaxPool1d | Det bruges til at anvende en 1D adaptiv max-pooling over et inputsignal, der består af flere inputplaner. | |
14) torch.nn.AdavtiveMaxPool2d | Det bruges til at anvende en 2D adaptiv max-pooling over et inputsignal, der består af flere inputplaner. | |
15) torch.nn.AdavtiveMaxPool3d | Det bruges til at anvende en 3D adaptiv max pooling over et inputsignal, der består af flere inputplaner. | |
16) torch.nn.AdavtiveAvgPool1d | Det bruges til at anvende en 1D adaptiv gennemsnitspooling over et inputsignal, der består af flere inputplaner. | |
17) torch.nn.AdavtiveAvgPool2d | Det bruges til at anvende en 2D adaptiv gennemsnitspooling over et inputsignal, der består af flere inputplaner. | |
18) torch.nn.AdavtiveAvgPool3d | Det bruges til at anvende en 3D adaptiv gennemsnitspooling over et inputsignal, der består af flere inputplaner. | |
5. | Polstringslag | |
1) fakkel.nn.ReflectionPad1d | Det vil udfylde inputtensoren ved hjælp af refleksionen af inputgrænsen. | |
2) fakkel.nn.ReflactionPad2d | Det vil udfylde inputtensoren ved hjælp af refleksionen af inputgrænsen. | |
3) torch.nn.ReplicationPad1 | Det vil udfylde inputtensoren ved hjælp af replikeringen af inputgrænsen. | |
4) torch.nn.ReplicationPad2d | Det vil udfylde inputtensoren ved hjælp af replikeringen af inputgrænsen. | |
5) torch.nn.ReplicationPad3d | Det vil udfylde inputtensoren ved hjælp af replikeringen af inputgrænsen. | |
6) torch.nn.ZeroPad2d | Det vil udfylde inputtensorgrænserne med nul. | |
7) fakkel.nn.ConstantPad1d | Det vil udfylde inputtensorgrænserne med en konstant værdi. | |
8) fakkel.nn.ConstantPad2d | Det vil udfylde inputtensorgrænserne med en konstant værdi. | |
9) fakkel.nn.ConstantPad3d | Det vil udfylde inputtensorgrænserne med en konstant værdi. | |
6. | Ikke-lineære aktiveringer (vægtet sum, ikke-linearitet) | |
1) fakkel.nn.ELU | Det vil bruge til at anvende den elementmæssige funktion: ELU(x)=max(0,x)+min(0,α*(exp(x)-1)) | |
2) fakkel.nn.Hardkrympe | Det vil bruge til at anvende den hårde krympningsfunktion element-mæssig funktion: | |
3) fakkel.nn.LeakyReLU | Det vil bruge til at anvende den elementmæssige funktion: LeakyReLu(x)=max(0,x) +negative_slope*min(0,x) | |
4) fakkel.nn.LogSigmoid | Det vil bruge til at anvende den elementmæssige funktion: | |
5) fakkel.nn.MultiheadAttention | Det bruges til at give modellen mulighed for at behandle information fra forskellige repræsentationsunderrum | |
6) fakkel.nn.PReLU | Det vil blive brugt til at anvende den elementmæssige funktion: PReLU(x)=max(0,x)+a*min(0,x) | |
7) fakkel.nn.ReLU | Det vil bruge til at anvende den ensrettede lineære enhedsfunktion elementmæssigt: ReLU(x)=max(0,x) | |
8) fakkel.nn.ReLU6 | Det vil blive brugt til at anvende den elementmæssige funktion: ReLU6(x)=min(max(0,x),6) | |
9) fakkel.nn.RReLU | Det vil bruge til at anvende den randomiserede utætte ensrettede lineære enhedsfunktion, elementmæssigt, som beskrevet i papiret: | |
10) fakkel.nn.SELU | Det vil bruge til at anvende den elementmæssige funktion som: SELU(x)=skala*(max(0,x)+ min(0,a*(exp(x)-1))) Her α= 1,6732632423543772848170429916717 og skala = 1,0507009873554804934193349852946. | |
11) fakkel.nn.MÅL | Det vil bruge til at anvende den elementmæssige funktion som: | |
12) fakkel.nn.Sigmoid | Det vil bruge til at anvende den elementmæssige funktion som: | |
13) fakkel.nn.Softplus | Det vil bruge til at anvende den elementmæssige funktion som: | |
14) fakkel.nn.Softshrink | Det vil bruge til at anvende blød krympefunktion elementvist som: | |
15) fakkel.nn.Softsign | Det vil bruge til at anvende den elementmæssige funktion som: | |
16) fakkel.nn.Tanh | Det vil bruge til at anvende den elementmæssige funktion som: | |
17) fakkel.nn.Tanhshrink | Det vil bruge til at anvende den elementmæssige funktion som: Tanhshrink(x)=x-Tanh(x) | |
18) fakkel.nn.Tærskel | Det vil bruge til at tærske hvert element i inputtensoren. Tærskel er defineret som: | |
7. | Ikke-lineære aktiveringer (andre) | |
1) fakkel.nn.Softmin | Den bruges til at anvende softmin-funktionen på en n-dimensional inputtensor for at omskalere dem. Derefter ligger elementerne i det n-dimensionelle output Tensor i området 0, 1 og summen til 1. Softmin er defineret som: | |
2) fakkel.nn.Softmax | Den bruges til at anvende softmax-funktionen på en n-dimensional inputtensor for at omskalere dem. Derefter ligger elementerne i det n-dimensionelle output Tensor i området 0, 1 og summen til 1. Softmax er defineret som: | |
3) fakkel.nn.Softmax2d | Det bruges til at anvende SoftMax over funktioner til hver rumlig placering. | |
4) torch.nn.LogSoftmax | Den bruges til at anvende LogSoftmax-funktion på en n-dimensional inputtensor. LofSoftmax-funktionen kan defineres som: | |
5) torch.nn.AdaptiveLogSoftmaxWithLoss | Det er en strategi for træningsmodeller med store udgangsrum. Det er meget effektivt, når etiketfordelingen er meget ubalanceret | |
8. | Normaliseringslag | |
1) torch.nn.BatchNorm1d | Det bruges til at anvende batch-normalisering over en 2D- eller 3D-input. | |
2) torch.nn.BatchNorm2d | Det bruges til at anvende batch-normalisering over en 4D. | |
3) torch.nn.BatchNorm3d | Det bruges til at anvende batch-normalisering over 5D-input. | |
4) torch.nn.GroupNorm | Det bruges til at anvende gruppenormalisering over en mini-batch af input. | |
5) torch.nn.SyncBatchNorm | Det bruges til at anvende batch-normalisering over n-dimensionelle input. | |
6) torch.nn.InstanceNorm1d | Det bruges til at anvende en instansnormalisering over et 3D-input. | |
7) torch.nn.InstanceNorm2d | Det bruges til at anvende en instansnormalisering over et 4D-input. | |
8) torch.nn.InstanceNorm3d | Det bruges til at anvende en instansnormalisering over et 5D-input. | |
9) fakkel.nn.LayerNorm | Det bruges til at anvende lagnormalisering over en mini-batch af input. | |
10) torch.nn.LocalResponseNorm | Det bruges til at anvende lokal responsnormalisering over et inputsignal, som er sammensat af flere inputplaner, hvor kanalen optager den anden dimension. | |
9. | Tilbagevendende lag | |
1) fakkel.nn.RNN | Den bruges til at anvende en flerlags Elman RNN med tanh eller ReLU ikke-linearitet til en inputsekvens. Hvert lag beregner følgende funktion for hvert element i inputsekvensen: ht=tanh(Wdemxt+bdem+Whhtt-1+bhh) | |
2) fakkel.nn.LSTM | Den bruges til at anvende en flerlags lang korttidshukommelse (LSTM) RNN til en inputsekvens. Hvert lag beregner følgende funktion for hvert element i inputsekvensen: | |
3) fakkel.nn.GRU | Den bruges til at anvende en multi-layer gated recurrent unit (GRU) RNN til en inputsekvens. Hvert lag beregner følgende funktion for hvert element i inputsekvensen: | |
4) fakkel.nn.RNNCell | Det bruges til at anvende en Elman RNN celle med tanh eller ReLU ikke-linearitet til en inputsekvens. Hvert lag beregner følgende funktion for hvert element i inputsekvensen: h'=tanh(Wdemx+bdem+Whhh+bhh) ReLU bruges i stedet for tanh | |
5) fakkel.nn.LSTMCell | Den bruges til at anvende en langtidshukommelsescelle (LSTM) til en inputsekvens. Hvert lag beregner følgende funktion for hvert element i inputsekvensen: Hvor σ er sigmoidfunktionen, og * er Hadamard-produktet. | |
6) fakkel.nn.GRUCell | Den bruges til at anvende en gated recurrent unit (GRU) celle til en inputsekvens. Hvert lag beregner følgende funktion for hvert element i inputsekvensen: | |
10. | Lineære lag | |
1) fakkel.nn.Identitet | Det er en pladsholderidentitetsoperator, som er argumentufølsom. | |
2) fakkel.nn.Lineær | Det bruges til at anvende en lineær transformation til de indkommende data: y=xAT+b | |
3) fakkel.nn.Bilineær | Det bruges til at anvende en bilineær transformation til de indkommende data: y=x1Økse2+b | |
elleve. | Udfaldslag | |
1) fakkel.nn.Frafald | Det bruges til regularisering og forebyggelse af co-adaptation af neuroner. En faktor på under træning skalerer outputtet. Det betyder, at modulet beregner en identitetsfunktion under evalueringen. | |
2) torch.nn.Dropout2d | Hvis tilstødende pixels i feature maps er korreleret, vil torch.nn.Dropout ikke regulere aktiveringerne, og det vil reducere den effektive indlæringshastighed. I dette tilfælde bruges torch.nn.Dropout2d() til at fremme uafhængighed mellem feature maps. | |
3) torch.nn.Dropout3d | Hvis tilstødende pixels i feature maps er korreleret, vil torch.nn.Dropout ikke regulere aktiveringerne, og det vil reducere den effektive indlæringshastighed. I dette tilfælde bruges torch.nn.Dropout2d () til at fremme uafhængighed mellem feature maps. | |
4) torch.nn.AlphaDropout | Det bruges til at anvende Alpha Dropout over inputtet. Alpha Dropout er en type Dropout, som bevarer den selvnormaliserende egenskab. | |
12. | Sparsomme lag | |
1) fakkel.nn.Indlejring | Det bruges til at gemme ordindlejringer og hente dem ved hjælp af indekser. Indgangen til modulet er en liste over indekser, og outputtet er den tilsvarende ordindlejring. | |
2) torch.nn.EmbeddingBag | Det bruges til at beregne summer eller gennemsnit af 'poser' med indlejring uden at instansiere den mellemliggende indlejring. | |
13. | Afstandsfunktion | |
1) fakkel.nn.CosineSimilaritet | Det vil returnere cosinus-ligheden mellem x1 og x2, beregnet langs dim. | |
2) torch.nn.PairwiseDistance | Den beregner den batchvise parvise afstand mellem vektorer v1, v2 ved hjælp af p-normen: | |
14. | Tabsfunktion | |
1) fakkel.nn.L1Tab | Det bruges til et kriterium, der måler den gennemsnitlige absolutte fejl mellem hvert element i input x og mål y. Det ureducerede tab kan beskrives som: l(x,y)=L={l1,...,ln},ln=|xn-ogn|, Hvor N er batchstørrelsen. | |
2) fakkel.nn.MSEloss | Det bruges til et kriterium, der måler den gennemsnitlige kvadratiske fejl mellem hvert element i input x og mål y. Det ureducerede tab kan beskrives som: l(x,y)=L={l1,...,ln},ln=(xn-ogn)2, Hvor N er batchstørrelsen. | |
3) torch.nn.CrossEntropyLoss | Dette kriterium kombinerer nn.LogSoftmax() og nn.NLLLoss() i én enkelt klasse. Det er nyttigt, når vi træner et klassifikationsproblem med C-klasser. | |
4) torch.nn.CTCLoss | Connectionist Temporal Classification tab beregner tab mellem en kontinuerlig tidsserie og en målsekvens. | |
5) fakkel.nn.NLLLos | Negative Log-Likelihood-tabet bruges til at træne et klassifikationsproblem med C-klasser. | |
6) fakkel.nn.PoissonNLLLos | Det negative log-sandsynlighedstab med Poisson-fordelingen af t target~Poisson(input)tab(input,mål)=input-mål*log(mål!)målet. | |
7) torch.nn.KLDivLoss | Det er et nyttigt afstandsmål til kontinuerlig fordeling, og det er også nyttigt, når vi udfører direkte regression over rummet med kontinuerlig outputfordeling. | |
8) fakkel.nn.BCELoss | Det bruges til at oprette et kriterium, som måler den binære krydsentropi mellem målet og outputtet. Det ureducerede tab kan beskrives som: l(x,y)=L={l1,...,ln},ln=-vn[ogn*logxn+ (1-årn)*log(1-xn)], Hvor N er batchstørrelsen. | |
9) torch.nn.BCEWithLogitsLoss | Den kombinerer et Sigmoid-lag og BCEloss i én enkelt klasse. Vi kan drage fordel af log-sum-exp-tricket for numerisk stabilitet ved at kombinere operationen i et lag. | |
10) torch.nn.MarginRankingLoss | Det opretter et kriterium, som måler tabet af givne input x1, x2, to 1D mini-batch-tensorer og en etiket 1D-mini-batch-tensor y, som indeholder 1 eller -1. Tabsfunktionen for hver prøve i minibatchen er som følger: tab(x,y)=max(0,-y*(x1-x2)+margin | |
11) torch.nn.HingeEmbeddingLoss | HingeEmbeddingLoss måler tabet af givet en inputtensor x og en labels tensor y, som indeholder 1 eller -1. Det bruges til at måle, om to indgange er ens eller forskellige. Tabsfunktionen er defineret som: | |
12) torch.nn.MultiLabelMarginLoss | Det bruges til at skabe et kriterium, som optimerer et multi-klasse multi-klassifikation hængseltab mellem input x og output y. | |
13) torch.nn.SmoothL1Loss | Det bruges til at oprette et kriterium, som bruger et kvadreret led, hvis den absolutte elementmæssige fejl falder under 1 og et L1-led ellers. Det er også kendt som Huber-tab: | |
14) torch.nn.SoftMarginLoss | Det bruges til at skabe et kriterium, som optimerer to-klassifikationslogistiske tab mellem inputtensor x og måltensor y, som indeholder 1 eller -1. | |
15) torch.nn.MultiLabelSoftMarginLoss | Det bruges til at oprette et kriterium, som optimerer multi-label en-versus-alle tab baseret på max-entropi mellem input x og mål y af størrelse (N, C). | |
16) torch.nn.CosineEmbeddingLoss | Det bruges til at skabe et kriterium, som måler tabet af givne inputtensorer x1, x2 og en tensoretiket y med værdierne 1 eller -1. Den bruges til at måle, om to indgange er ens eller uens, ved hjælp af cosinusafstanden. | |
17) torch.nn.MultiMarginLoss | Det bruges til at skabe et kriterium, som optimerer et multi-klasse klassifikations-hængseltab mellem input x og output y. | |
18) torch.nn.TripletMarginLoss | Det bruges til at skabe et kriterium, som måler triplettabet af givet inputtensorer x1, x2, x3 og en margin med en værdi større end 0. Det bruges til at måle en relativ lighed mellem prøver. En triplet er sammensat af et anker, et positivt eksempel og et negativt eksempel. L(a,p,n)=max{d(ajeg, sjeg)-d(ajeg,njeg)+margin,0} | |
femten. | Synslag | |
1) torch.nn.PixelShuffle | Det bruges til at omarrangere elementerne i en tensor af form(*,C×r2,H,W) til en tensor af form (*,C,H×r,W,r) | |
2) fakkel.nn.Upsample | Det bruges til at upsample en given multi-kanal 1D, 2D eller 3D data. | |
3) torch.nn.upsamplingNearest2d | Den bruges til at anvende 2D-nærmeste nabo upsampling til et inputsignal, som er sammensat med flere inputkanaler. | |
4) torch.nn.UpsamplingBilinear2d | Det bruges til at anvende 2D bilineær upsampling til et inputsignal, der er sammensat med flere inputkanaler. | |
16. | DataParallelle lag (multi-GPU, distribueret) | |
1) torch.nn.DataParallel | Det bruges til at implementere dataparallelisme på modulniveau. | |
2) torch.nn.DistributedDataParallel | Det bruges til at implementere distribueret dataparallelisme, som er baseret på torch.distributed-pakken på modulniveau. | |
3) torch.nn.DistributedDataParallelCPU | Det bruges til at implementere distribueret dataparallelisme for CPU'en på modulniveau. | |
17. | Hjælpeprogrammer | |
1) torch.nn.clip_grad_norm_ | Det bruges til at klippe gradientnormen for en iterabel af parametre. | |
2) torch.nn.clip_grad_value_ | Den bruges til at klippe gradientnormen for en gentagelse af parametre ved den angivne værdi. | |
3) torch.nn.parameters_to_vector | Det bruges til at konvertere parametre til én vektor. | |
4) torch.nn.vector_to_parameters | Det bruges til at konvertere en vektor til parametrene. | |
5) torch.nn.weight_norm | Det bruges til at anvende vægtnormalisering på en parameter i det givne modul. | |
6) torch.nn.remove_weight_norm | Det bruges til at fjerne vægtnormaliseringen og re-parametriseringen fra et modul. | |
7) torch.nn.spectral_norm | Det bruges til at anvende spektral normalisering til en parameter i det givne modul. | |
8) torch.nn.PackedSequence | Det vil bruge til at holde dataene og listen over batch_sizes af en pakket sekvens. | |
9) torch.nn.pack_padded_sequence | Det bruges til at pakke en Tensor, der indeholder polstrede sekvenser af variabel længde. | |
10) torch.nn.pad_packed_sequence | Det bruges til at pude en pakket batch af sekvenser med variabel længde. | |
11) torch.nn.pad_sequence | Den bruges til at udfylde en liste over tensorer med variabel længde med polstringsværdi. | |
12) torch.nn.pack_sequence | Det bruges til at pakke en liste over tensorer med variabel længde | |
13) torch.nn.remove_spectral_norm | Det bruges til at fjerne den spektrale normalisering og re-parameterisering fra et modul. |
Reference:
https://pytorch.org/docs/stable/nn.html