PyTorch fornisce il modulo torch.nn per aiutarci nella creazione e nell'addestramento della rete neurale. Per prima cosa addestreremo la rete neurale di base sul set di dati MNIST senza utilizzare alcuna funzionalità di questi modelli. Utilizzeremo solo la funzionalità di base del tensore PyTorch e quindi aggiungeremo in modo incrementale una funzionalità da torch.nn alla volta.
torch.nn ci fornisce molte più classi e moduli per implementare e addestrare la rete neurale.
Il pacchetto nn contiene i seguenti moduli e classi:
Si No | Classe e modulo | Descrizione |
---|---|---|
1. | torcia.nn.Parametro | È un tipo di tensore da considerare come parametro del modulo. |
2. | Contenitori | |
1) torcia.nn.Modulo | È una classe base per tutti i moduli di rete neurale. | |
2) torcia.nn.Sequenziale | È un contenitore sequenziale in cui i moduli verranno aggiunti nello stesso ordine in cui vengono passati al costruttore. | |
3) torcia.nn.ModuleList | Ciò manterrà i sottomoduli in un elenco. | |
4) torcia.nn.ModuleDict | Ciò manterrà i sottomoduli in una directory. | |
5) torcia.nn.ParameterList | Ciò manterrà i parametri in un elenco. | |
6) torcia.nn.parametroDict | Ciò manterrà i parametri in una directory. | |
3. | Strati di convoluzione | |
1) torcia.nn.Conv1d | Questo pacchetto verrà utilizzato per applicare una convoluzione 1D su un segnale di ingresso composto da diversi piani di ingresso. | |
2) torcia.nn.Conv2d | Questo pacchetto verrà utilizzato per applicare una convoluzione 2D su un segnale di ingresso composto da diversi piani di ingresso. | |
3) torcia.nn.Conv3d | Questo pacchetto verrà utilizzato per applicare una convoluzione 3D su un segnale di ingresso composto da diversi piani di ingresso. | |
4) torch.nn.ConvTranspose1d | Questo pacchetto verrà utilizzato per applicare un operatore di convoluzione trasposto 1D su un'immagine di input composta da diversi piani di input. | |
5) torch.nn.ConvTranspose2d | Questo pacchetto verrà utilizzato per applicare un operatore di convoluzione trasposto 2D su un'immagine di input composta da diversi piani di input. | |
6) torcia.nn.ConvTranspose3d | Questo pacchetto verrà utilizzato per applicare un operatore di convoluzione trasposto 3D su un'immagine di input composta da diversi piani di input. | |
7) torcia.nn.Spiegare | Viene utilizzato per estrarre blocchi locali scorrevoli da un tensore di input batch. | |
8) torcia.nn.Piega | Viene utilizzato per combinare una serie di blocchi locali scorrevoli in un grande tensore contenente. | |
4. | Strati di raggruppamento | |
1) torcia.nn.MaxPool1d | Viene utilizzato per applicare un pooling massimo 1D su un segnale di ingresso composto da diversi piani di ingresso. | |
2) torcia.nn.MaxPool2d | Viene utilizzato per applicare un pooling massimo 2D su un segnale di ingresso composto da diversi piani di ingresso. | |
3) torcia.nn.MaxPool3d | Viene utilizzato per applicare un pooling 3D massimo su un segnale di ingresso composto da diversi piani di ingresso. | |
4) torcia.nn.MaxUnpool1d | Viene utilizzato per calcolare l'inverso parziale di MaxPool1d. | |
5) torcia.nn.MaxUnpool2d | Viene utilizzato per calcolare l'inverso parziale di MaxPool2d. | |
6) torcia.nn.MaxUnpool3d | Viene utilizzato per calcolare l'inverso parziale di MaxPool3d. | |
7) torcia.nn.AvgPool1d | Viene utilizzato per applicare un pooling medio 1D su un segnale di ingresso composto da diversi piani di ingresso. | |
8) torcia.nn.AvgPool2d | Viene utilizzato per applicare un pooling medio 2D su un segnale di ingresso composto da diversi piani di ingresso. | |
9) torcia.nn.AvgPool3d | Viene utilizzato per applicare un pooling medio 3D su un segnale di ingresso composto da diversi piani di ingresso. | |
10) torcia.nn.FractionalMaxPool2d | Viene utilizzato per applicare un pool massimo frazionario 2D su un segnale di ingresso composto da diversi piani di ingresso. | |
11) torcia.nn.LPPool1d | Viene utilizzato per applicare un pooling medio di potenza 1D su un segnale di ingresso composto da diversi piani di ingresso. | |
12) torcia.nn.LPPool2d | Viene utilizzato per applicare un pooling della potenza media 2D su un segnale di ingresso composto da diversi piani di ingresso. | |
13) torch.nn.AdavtiveMaxPool1d | Viene utilizzato per applicare un pooling massimo adattivo 1D su un segnale di ingresso composto da diversi piani di ingresso. | |
14) torch.nn.AdavtiveMaxPool2d | Viene utilizzato per applicare un pooling massimo adattivo 2D su un segnale di ingresso composto da diversi piani di ingresso. | |
15) torch.nn.AdavtiveMaxPool3d | Viene utilizzato per applicare un pooling massimo adattivo 3D su un segnale di ingresso composto da diversi piani di ingresso. | |
16) torch.nn.AdavtiveAvgPool1d | Viene utilizzato per applicare un pool medio adattivo 1D su un segnale di ingresso composto da diversi piani di ingresso. | |
17) torch.nn.AdavtiveAvgPool2d | Viene utilizzato per applicare un pool medio adattivo 2D su un segnale di ingresso composto da diversi piani di ingresso. | |
18) torch.nn.AdavtiveAvgPool3d | Viene utilizzato per applicare un pool medio adattivo 3D su un segnale di ingresso composto da diversi piani di ingresso. | |
5. | Strati di imbottitura | |
1) torcia.nn.ReflectionPad1d | Riempirà il tensore di input utilizzando la riflessione del confine di input. | |
2) torcia.nn.ReflactionPad2d | Riempirà il tensore di input utilizzando la riflessione del confine di input. | |
3) torcia.nn.ReplicationPad1 | Riempirà il tensore di input utilizzando la replica del confine di input. | |
4) torcia.nn.ReplicationPad2d | Riempirà il tensore di input utilizzando la replica del confine di input. | |
5) torcia.nn.ReplicationPad3d | Riempirà il tensore di input utilizzando la replica del confine di input. | |
6) torcia.nn.ZeroPad2d | Riempirà i confini del tensore di input con zero. | |
7) torcia.nn.ConstantPad1d | Riempirà i confini del tensore di input con un valore costante. | |
8) torcia.nn.ConstantPad2d | Riempirà i confini del tensore di input con un valore costante. | |
9) torcia.nn.ConstantPad3d | Riempirà i confini del tensore di input con un valore costante. | |
6. | Attivazioni non lineari (somma ponderata, non linearità) | |
1) torcia.nn.ELU | Utilizzerà per applicare la funzione elemento-saggio: ELU(x)=max(0,x)+min(0,α*(exp(x)-1)) | |
2) torcia.nn.Hardshrink | Verrà utilizzato per applicare la funzione di contrazione dura per elemento: | |
3) torcia.nn.LeakyReLU | Utilizzerà per applicare la funzione elemento-saggio: LeakyReLu(x)=max(0,x) +pendenza_negativa*min(0,x) | |
4) torch.nn.LogSigmoid | Utilizzerà per applicare la funzione elemento-saggio: | |
5) torch.nn.MultiheadAttention | Viene utilizzato per consentire al modello di occuparsi delle informazioni provenienti da diversi sottospazi di rappresentazione | |
6) torcia.nn.PReLU | Verrà utilizzato per applicare la funzione elemento-saggio: PReLU(x)=max(0,x)+a*min(0,x) | |
7) torcia.nn.ReLU | Utilizzerà per applicare la funzione dell'unità lineare rettificata per elemento: ReLU(x)=max(0,x) | |
8) torcia.nn.ReLU6 | Verrà utilizzato per applicare la funzione elemento-saggio: ReLU6(x)=min(max(0,x),6) | |
9) torcia.nn.RReLU | Verrà utilizzato per applicare la funzione dell'unità lineare rettificata con perdita casuale, per elemento, come descritto nel documento: | |
10) torcia.nn.SELU | Utilizzerà per applicare la funzione elemento-saggio come: SELU(x)=scala*(max(0,x)+ min(0,a*(exp(x)-1))) Qui α= 1.6732632423543772848170429916717 e scala = 1.0507009873554804934193349852946. | |
11) torcia.nn.TARGET | Utilizzerà per applicare la funzione elemento-saggio come: | |
12) torcia.nn.Sigma | Utilizzerà per applicare la funzione elemento-saggio come: | |
13) torcia.nn.Softplus | Utilizzerà per applicare la funzione elemento-saggio come: | |
14) torcia.nn.Restringimento morbido | Verrà utilizzato per applicare la funzione di ritiro graduale in modo elementare come: | |
15) torcia.nn.Softsign | Utilizzerà per applicare la funzione elemento-saggio come: | |
16) torcia.nn.Tanh | Utilizzerà per applicare la funzione elemento-saggio come: | |
17) torcia.nn.Tanhshrink | Utilizzerà per applicare la funzione elemento-saggio come: Tanhrestringimento(x)=x-Tanh(x) | |
18) torcia.nn.Soglia | Utilizzerà le soglie di ciascun elemento del tensore di input. La soglia è definita come: | |
7. | Attivazioni non lineari (altro) | |
1) torcia.nn.Softmin | Viene utilizzato per applicare la funzione softmin a un tensore di input n-dimensionale per ridimensionarli. Successivamente, gli elementi del tensore di output n-dimensionale rientrano nell'intervallo 0, 1 e la somma è 1. Softmin è definito come: | |
2) torcia.nn.Softmax | Viene utilizzato per applicare la funzione softmax a un tensore di input n-dimensionale per ridimensionarli. Successivamente, gli elementi del tensore di output n-dimensionale rientrano nell'intervallo 0, 1 e si sommano a 1. Softmax è definito come: | |
3) torcia.nn.Softmax2d | Viene utilizzato per applicare SoftMax sulle funzionalità a ciascuna posizione spaziale. | |
4) torcia.nn.LogSoftmax | Viene utilizzato per applicare la funzione LogSoftmax a un tensore di input n-dimensionale. La funzione LofSoftmax può essere definita come: | |
5) torch.nn.AdaptiveLogSoftmaxWithLoss | È una strategia per addestrare modelli con ampi spazi di output. È molto efficace quando la distribuzione delle etichette è molto sbilanciata | |
8. | Strati di normalizzazione | |
1) torcia.nn.BatchNorm1d | Viene utilizzato per applicare la normalizzazione batch su input 2D o 3D. | |
2) torcia.nn.BatchNorm2d | Viene utilizzato per applicare la normalizzazione batch su un 4D. | |
3) torcia.nn.BatchNorm3d | Viene utilizzato per applicare la normalizzazione batch sugli input 5D. | |
4) torch.nn.GroupNorm | Viene utilizzato per applicare la normalizzazione di gruppo su un mini-batch di input. | |
5) torcia.nn.SyncBatchNorm | Viene utilizzato per applicare la normalizzazione batch su input n-dimensionali. | |
6) torch.nn.InstanceNorm1d | Viene utilizzato per applicare una normalizzazione dell'istanza su un input 3D. | |
7) torch.nn.InstanceNorm2d | Viene utilizzato per applicare una normalizzazione dell'istanza su un input 4D. | |
8) torcia.nn.InstanceNorm3d | Viene utilizzato per applicare una normalizzazione dell'istanza su un input 5D. | |
9) torcia.nn.LayerNorm | Viene utilizzato per applicare la normalizzazione dei livelli su un mini-batch di input. | |
10) torch.nn.LocalResponseNorm | Viene utilizzato per applicare la normalizzazione della risposta locale su un segnale di ingresso composto da diversi piani di ingresso, dove il canale occupa la seconda dimensione. | |
9. | Strati ricorrenti | |
1) torcia.nn.RNN | Viene utilizzato per applicare un Elman RNN multistrato con non linearità tanh o ReLU a una sequenza di input. Ciascun livello calcola la seguente funzione per ciascun elemento nella sequenza di input: HT=tanh(WloroXT+bloro+WehTt-1+beh) | |
2) torcia.nn.LSTM | Viene utilizzato per applicare una RNN di memoria a breve termine multistrato (LSTM) a una sequenza di input. Ciascun livello calcola la seguente funzione per ciascun elemento nella sequenza di input: | |
3) torcia.nn.GRU | Viene utilizzato per applicare un RNN di unità ricorrente con gate multistrato (GRU) a una sequenza di input. Ciascun livello calcola la seguente funzione per ciascun elemento nella sequenza di input: | |
4) torcia.nn.RNNCell | Viene utilizzato per applicare una cella Elman RNN con non linearità tanh o ReLU a una sequenza di input. Ciascun livello calcola la seguente funzione per ciascun elemento nella sequenza di input: h'=tanh(Wlorox+bloro+Wehh+beh) ReLU viene utilizzato al posto di tanh | |
5) torcia.nn.LSTMCell | Viene utilizzato per applicare una cella di memoria a lungo termine (LSTM) a una sequenza di input. Ciascun livello calcola la seguente funzione per ciascun elemento nella sequenza di input: Dove σ è la funzione sigmoidea e * è il prodotto di Hadamard. | |
6) torcia.nn.GRUCell | Viene utilizzato per applicare una cella GRU (Gating Recurrent Unit) a una sequenza di input. Ciascun livello calcola la seguente funzione per ciascun elemento nella sequenza di input: | |
10. | Strati lineari | |
1) torcia.nn.Identità | È un operatore di identità segnaposto che non fa distinzione tra argomenti. | |
2) torcia.nn.Lineare | Viene utilizzato per applicare una trasformazione lineare ai dati in ingresso: y=xAT+b | |
3) torcia.nn.Bilineare | Viene utilizzato per applicare una trasformazione bilineare ai dati in ingresso: y=x1Ascia2+b | |
undici. | Strati di eliminazione | |
1) torcia.nn.Dropout | Viene utilizzato per la regolarizzazione e la prevenzione del coadattamento dei neuroni. Un fattore di durante l'allenamento ridimensiona l'output. Ciò significa che il modulo calcola una funzione di identità durante la valutazione. | |
2) torcia.nn.Dropout2d | Se i pixel adiacenti all'interno delle mappe delle caratteristiche sono correlati, torch.nn.Dropout non regolarizzerà le attivazioni e ridurrà il tasso di apprendimento effettivo. In questo caso, torch.nn.Dropout2d() viene utilizzato per promuovere l'indipendenza tra le mappe delle caratteristiche. | |
3) torcia.nn.Dropout3d | Se i pixel adiacenti all'interno delle mappe delle caratteristiche sono correlati, torch.nn.Dropout non regolarizzerà le attivazioni e ridurrà il tasso di apprendimento effettivo. In questo caso, torch.nn.Dropout2d () viene utilizzato per promuovere l'indipendenza tra le mappe delle caratteristiche. | |
4) torch.nn.AlphaDropout | Viene utilizzato per applicare Alpha Dropout sull'input. Alpha Dropout è un tipo di Dropout che mantiene la proprietà autonormalizzante. | |
12. | Strati sparsi | |
1) torcia.nn.Incorporamento | Viene utilizzato per memorizzare gli incorporamenti di parole e recuperarli utilizzando gli indici. L'input per il modulo è un elenco di indici e l'output è l'incorporamento di parole corrispondente. | |
2) torch.nn.EmbeddingBag | Viene utilizzato per calcolare le somme o la media dei 'sacchetti' di incorporamento senza istanziare l'incorporamento intermedio. | |
13. | Funzione Distanza | |
1) torch.nn.CosineSimilarity | Restituirà la somiglianza del coseno tra x1 e x2, calcolata lungo dim. | |
2) torcia.nn.PairwiseDistance | Calcola la distanza a coppie in batch tra i vettori v1, v2 utilizzando la norma p: | |
14. | Funzione di perdita | |
1) torcia.nn.L1Perdita | Viene utilizzato per un criterio che misura l'errore medio assoluto tra ciascun elemento nell'input x e l'obiettivo y. La perdita non ridotta può essere descritta come: l(x,y)=L={l1,...,lN},lN=|xN-EN|, Dove N è la dimensione del batch. | |
2) torcia.nn.MSELoss | Viene utilizzato per un criterio che misura l'errore quadratico medio tra ciascun elemento nell'input x e l'obiettivo y. La perdita non ridotta può essere descritta come: l(x,y)=L={l1,...,lN},lN=(xN-EN)2, Dove N è la dimensione del batch. | |
3) torch.nn.CrossEntropyLoss | Questo criterio combina nn.LogSoftmax() e nn.NLLLoss() in un'unica classe. È utile quando addestriamo un problema di classificazione con le classi C. | |
4) torcia.nn.CTCLoss | La perdita di classificazione temporale connessionista calcola la perdita tra una serie temporale continua e una sequenza target. | |
5) torch.nn.NLLLoss | La perdita di log-verosimiglianza negativa viene utilizzata per addestrare un problema di classificazione con classi C. | |
6) torch.nn.PoissonNLLLoss | La perdita di verosimiglianza negativa con la distribuzione di Poisson di t target~Poisson(input)loss(input,target)=input-target*log(target!)il target. | |
7) torcia.nn.KLDivLoss | È una misura di distanza utile per la distribuzione continua ed è utile anche quando eseguiamo una regressione diretta sullo spazio della distribuzione continua dell'output. | |
8) torcia.nn.BCEloss | Viene utilizzato per creare un criterio che misura l'entropia incrociata binaria tra il target e l'output. La perdita non ridotta può essere descritta come: l(x,y)=L={l1,...,lN},lN=-vN[EN*logxN+ (1 annoN)*log(1-xN)], Dove N è la dimensione del batch. | |
9) torch.nn.BCEWithLogitsLoss | Combina uno strato Sigmoid e BCELoss in un'unica classe. Possiamo sfruttare il trucco log-sum-exp per la stabilità numerica combinando l'operazione in un unico livello. | |
10) torch.nn.MarginRankingLoss | Crea un criterio che misura la perdita di determinati input x1, x2, due tensori mini-batch 1D e un'etichetta tensore mini-batch 1D y che contiene 1 o -1. La funzione di perdita per ciascun campione nel mini-batch è la seguente: perdita(x,y)=max(0,-y*(x1-X2)+margine | |
11) torch.nn.HingeEmbeddingLoss | HingeEmbeddingLoss misura la perdita di un tensore di input x e di un tensore di etichette y che contengono 1 o -1. Viene utilizzato per misurare se due input sono simili o dissimili. La funzione di perdita è definita come: | |
12) torch.nn.MultiLabelMarginLoss | Viene utilizzato per creare un criterio che ottimizzi una perdita di cerniera multiclassificazione multiclasse tra l'input x e l'output y. | |
13) torcia.nn.SmoothL1Loss | Viene utilizzato per creare un criterio che utilizza un termine al quadrato se l'errore assoluto per elemento scende al di sotto di 1 e un termine L1 altrimenti. È nota anche come perdita di Huber: | |
14) torch.nn.SoftMarginLoss | Viene utilizzato per creare un criterio che ottimizza la perdita logistica della classificazione a due classi tra il tensore di input x e il tensore di destinazione y che contengono 1 o -1. | |
15) torch.nn.MultiLabelSoftMarginLoss | Viene utilizzato per creare un criterio che ottimizza la perdita uno contro tutti multietichetta basata sull'entropia massima tra l'input x e il target y di dimensione (N, C). | |
16) torch.nn.CosineEmbeddingLoss | Viene utilizzato per creare un criterio che misura la perdita di determinati tensori di input x1, x2 e un'etichetta tensore y con valori 1 o -1. Viene utilizzato per misurare se due input sono simili o dissimili, utilizzando la distanza coseno. | |
17) torch.nn.MultiMarginLoss | Viene utilizzato per creare un criterio che ottimizzi una perdita di cerniera di classificazione multiclasse tra l'input x e l'output y. | |
18) torch.nn.TripletMarginLoss | Viene utilizzato per creare un criterio che misura la perdita di tripletta di un dato tensore di input x1, x2, x3 e un margine con un valore maggiore di 0. Viene utilizzato per misurare una somiglianza relativa tra i campioni. Una tripletta è composta da un'ancora, un esempio positivo e un esempio negativo. L(a,p,n)=massimo{d(aio,Pio)-d(aio,Nio)+margine,0} | |
quindici. | Strati di visione | |
1) torcia.nn.PixelShuffle | Viene utilizzato per riorganizzare gli elementi in un tensore di forma(*,C×r2,H,W) ad un tensore di forma (*,C,H×r,W,r) | |
2) torcia.nn.Upsample | Viene utilizzato per sovracampionare dati 1D, 2D o 3D multicanale. | |
3) torch.nn.upsamplingNearest2d | Viene utilizzato per applicare il sovracampionamento 2D del vicino più vicino a un segnale di ingresso composto da più canali di ingresso. | |
4) torch.nn.UpsamplingBilinear2d | Viene utilizzato per applicare il sovracampionamento bilineare 2D a un segnale di ingresso composto da più canali di ingresso. | |
16. | Livelli DataParallel (multi-GPU, distribuiti) | |
1) torcia.nn.DataParallel | Viene utilizzato per implementare il parallelismo dei dati a livello di modulo. | |
2) torch.nn.DistributedDataParallel | Viene utilizzato per implementare il parallelismo dei dati distribuiti, che si basa sul pacchetto torch.distributed a livello di modulo. | |
3) torch.nn.DistributedDataParallelCPU | Viene utilizzato per implementare il parallelismo dei dati distribuiti per la CPU a livello del modulo. | |
17. | Utilità | |
1) torcia.nn.clip_grad_norm_ | Viene utilizzato per ritagliare la norma del gradiente di un iterabile di parametri. | |
2) torcia.nn.clip_grad_value_ | Viene utilizzato per ritagliare la norma del gradiente di un iterabile di parametri al valore specificato. | |
3) torcia.nn.parametri_to_vettore | Viene utilizzato per convertire i parametri in un vettore. | |
4) torcia.nn.vettore_to_parametri | Viene utilizzato per convertire un vettore nei parametri. | |
5) torcia.nn.weight_norm | Viene utilizzato per applicare la normalizzazione del peso a un parametro nel modulo specificato. | |
6) torch.nn.remove_weight_norm | Viene utilizzato per rimuovere la normalizzazione e la riparametrizzazione del peso da un modulo. | |
7) torcia.nn.spectral_norm | Viene utilizzato per applicare la normalizzazione spettrale a un parametro nel modulo specificato. | |
8) torch.nn.PackedSequence | Verrà utilizzato per contenere i dati e l'elenco di batch_sizes di una sequenza compressa. | |
9) torch.nn.pack_padded_sequence | Viene utilizzato per imballare un Tensore contenente sequenze imbottite di lunghezza variabile. | |
10) torch.nn.pad_packed_sequence | Viene utilizzato per riempire un batch compresso di sequenze di lunghezza variabile. | |
11) torch.nn.pad_sequence | Viene utilizzato per riempire un elenco di tensori di lunghezza variabile con valore di riempimento. | |
12) torch.nn.pack_sequence | Viene utilizzato per comprimere un elenco di tensori di lunghezza variabile | |
13) torch.nn.remove_spectral_norm | Viene utilizzato per rimuovere la normalizzazione spettrale e la riparametrizzazione da un modulo. |
Riferimento:
https://pytorch.org/docs/stable/nn.html