PyTorch udostępnia moduł torch.nn, który pomaga nam w tworzeniu i szkoleniu sieci neuronowej. Najpierw przeszkolimy podstawową sieć neuronową na zbiorze danych MNIST, nie korzystając z żadnych funkcji z tych modeli. Będziemy używać tylko podstawowej funkcjonalności tensora PyTorch, a następnie stopniowo będziemy dodawać po jednej funkcji z torch.nn na raz.
torch.nn zapewnia nam znacznie więcej klas i modułów do wdrażania i uczenia sieci neuronowej.
Pakiet nn zawiera następujące moduły i klasy:
Tak nie | Klasa i moduł | Opis |
---|---|---|
1. | palnik.nn.Parametr | Jest to rodzaj tensora, który należy traktować jako parametr modułu. |
2. | Kontenery | |
1) palnik.nn.Moduł | Jest to klasa bazowa dla wszystkich modułów sieci neuronowych. | |
2) palnik.nn.Sekwencyjny | Jest to kontener sekwencyjny, w którym moduły będą dodawane w tej samej kolejności, w jakiej są przekazywane w konstruktorze. | |
3) latarka.nn.ModuleList | Spowoduje to przechowywanie podmodułów na liście. | |
4) palnik.nn.ModuleDict | Spowoduje to przechowywanie podmodułów w katalogu. | |
5) palnik.nn.Lista parametrów | Spowoduje to przechowywanie parametrów na liście. | |
6) palnik.nn.parametrDict | Spowoduje to przechowywanie parametrów w katalogu. | |
3. | Warstwy splotu | |
1) palnik.nn.Conv1d | Pakiet ten zostanie użyty do zastosowania splotu 1D na sygnale wejściowym złożonym z kilku płaszczyzn wejściowych. | |
2) palnik.nn.Conv2d | Pakiet ten zostanie użyty do zastosowania splotu 2D na sygnale wejściowym złożonym z kilku płaszczyzn wejściowych. | |
3) palnik.nn.Conv3d | Pakiet ten zostanie użyty do zastosowania splotu 3D na sygnale wejściowym złożonym z kilku płaszczyzn wejściowych. | |
4) palnik.nn.ConvTranspose1d | Pakiet ten zostanie użyty do zastosowania operatora splotu transponowanego 1D na obrazie wejściowym złożonym z kilku płaszczyzn wejściowych. | |
5) torch.nn.ConvTranspose2d | Ten pakiet zostanie użyty do zastosowania operatora splotu transponowanego 2D na obrazie wejściowym złożonym z kilku płaszczyzn wejściowych. | |
6) torch.nn.ConvTranspose3d | Pakiet ten zostanie użyty do zastosowania operatora splotu transponowanego 3D do obrazu wejściowego składającego się z kilku płaszczyzn wejściowych. | |
7) palnik.nn.Rozłóż | Służy do wyodrębniania przesuwnych bloków lokalnych z wsadowego tensora wejściowego. | |
8) palnik.nn.Złóż | Służy do łączenia tablicy przesuwanych bloków lokalnych w duży tensor zawierający. | |
4. | Łączenie warstw | |
1) palnik.nn.MaxPool1d | Służy do stosowania maksymalnego łączenia 1D sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
2) palnik.nn.MaxPool2d | Służy do stosowania maksymalnego łączenia 2D sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
3) latarka.nn.MaxPool3d | Służy do stosowania maksymalnego łączenia 3D sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
4) palnik.nn.MaxUnpool1d | Służy do obliczenia częściowej odwrotności MaxPool1d. | |
5) palnik.nn.MaxUnpool2d | Służy do obliczenia częściowej odwrotności MaxPool2d. | |
6) palnik.nn.MaxUnpool3d | Służy do obliczenia częściowej odwrotności MaxPool3d. | |
7) latarka.nn.AvgPool1d | Służy do stosowania średniego łączenia 1D w sygnale wejściowym złożonym z kilku płaszczyzn wejściowych. | |
8) latarka.nn.AvgPool2d | Służy do stosowania średniego łączenia 2D sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
9) torch.nn.AvgPool3d | Służy do stosowania średniego łączenia 3D sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
10) torch.nn.FractionalMaxPool2d | Służy do stosowania ułamkowego maksymalnego łączenia 2D sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
11) latarka.nn.LPPool1d | Służy do stosowania 1D łączenia średniej mocy na sygnale wejściowym złożonym z kilku płaszczyzn wejściowych. | |
12) latarka.nn.LPPool2d | Służy do stosowania łączenia średniej mocy 2D w sygnale wejściowym składającym się z kilku płaszczyzn wejściowych. | |
13) torch.nn.AdavtiveMaxPool1d | Służy do zastosowania adaptacyjnego maksymalnego łączenia 1D sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
14) torch.nn.AdavtiveMaxPool2d | Służy do zastosowania adaptacyjnego maksymalnego łączenia 2D sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
15) torch.nn.AdavtiveMaxPool3d | Służy do zastosowania adaptacyjnego maksymalnego łączenia 3D sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
16) torch.nn.AdavtiveAvgPool1d | Służy do stosowania adaptacyjnej średniej łączenia 1D dla sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
17) torch.nn.AdavtiveAvgPool2d | Służy do stosowania adaptacyjnego łączenia średniej 2D dla sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
18) torch.nn.AdavtiveAvgPool3d | Służy do stosowania adaptacyjnego łączenia średniej 3D dla sygnału wejściowego składającego się z kilku płaszczyzn wejściowych. | |
5. | Warstwy wyściółki | |
1) latarka.nn.ReflectionPad1d | Wypełni tensor wejściowy, korzystając z odbicia granicy wejściowej. | |
2) latarka.nn.ReflactionPad2d | Wypełni tensor wejściowy, korzystając z odbicia granicy wejściowej. | |
3) latarka.nn.ReplicationPad1 | Wypełni tensor wejściowy za pomocą replikacji granicy wejściowej. | |
4) latarka.nn.ReplicationPad2d | Wypełni tensor wejściowy za pomocą replikacji granicy wejściowej. | |
5) torch.nn.ReplicationPad3d | Wypełni tensor wejściowy za pomocą replikacji granicy wejściowej. | |
6) latarka.nn.ZeroPad2d | Spowoduje to wypełnienie granic tensora wejściowego zerem. | |
7) latarka.nn.ConstantPad1d | Wypełni granice tensora wejściowego stałą wartością. | |
8) latarka.nn.ConstantPad2d | Wypełni granice tensora wejściowego stałą wartością. | |
9) latarka.nn.ConstantPad3d | Wypełni granice tensora wejściowego stałą wartością. | |
6. | Aktywacje nieliniowe (suma ważona, nieliniowość) | |
1) latarka.nn.ELU | Będzie używany do zastosowania funkcji elementowej: ELU(x)=max(0,x)+min(0,α*(exp(x)-1)) | |
2) palnik.nn.Twardokurczliwy | Będzie używany do zastosowania funkcji twardego skurczu elementarnie: | |
3) latarka.nn.LeakyReLU | Będzie używany do zastosowania funkcji elementowej: LeakyReLu(x)=max(0,x) +nachylenie_ujemne*min(0,x) | |
4) latarka.nn.LogSigmoid | Będzie używany do zastosowania funkcji elementowej: | |
5) palnik.nn.MultiheadUwaga | Służy do umożliwienia modelowi uwzględnienia informacji z różnych podprzestrzeni reprezentacji | |
6) palnik.nn.PReLU | Będzie używany do zastosowania funkcji elementowej: PRELU(x)=max(0,x)+a*min(0,x) | |
7) palnik.nn.ReLU | Użyje elementu do zastosowania wyprostowanej funkcji jednostki liniowej: ReLU(x)=max(0,x) | |
8) palnik.nn.ReLU6 | Będzie używany do zastosowania funkcji elementowej: ReLU6(x)=min(max(0,x),6) | |
9) latarka.nn.RReLU | Zastosuje funkcję losowej, nieszczelnej, rektyfikowanej jednostki liniowej, elementarnie, jak opisano w artykule: | |
10) latarka.nn.SELU | Będzie używany do zastosowania funkcji elementarnej jako: SELU(x)=skala*(max(0,x)+ min(0,a*(exp(x)-1))) Tutaj α= 1,6732632423543772848170429916717 i skala = 1,0507009873554804934193349852946. | |
11) torch.nn.CELU | Będzie używany do zastosowania funkcji elementarnej jako: | |
12) pochodnia.nn.Sigmoid | Będzie używany do zastosowania funkcji elementarnej jako: | |
13) latarka.nn.Softplus | Będzie używany do zastosowania funkcji elementarnej jako: | |
14) palnik.nn.Softshrink | Użyje elementarnego zastosowania funkcji miękkiego skurczu jako: | |
15) latarka.nn.Softsign | Będzie używany do zastosowania funkcji elementarnej jako: | |
16) latarka.nn.Tanh | Będzie używany do zastosowania funkcji elementarnej jako: | |
17) latarka.nn.Tanhshrink | Będzie używany do zastosowania funkcji elementarnej jako: Tanhshrink(x)=x-Tanh(x) | |
18) latarka.nn.Próg | Będzie używany do progowania każdego elementu tensora wejściowego. Próg definiuje się jako: | |
7. | Aktywacje nieliniowe (inne) | |
1) palnik.nn.Softmin | Służy do zastosowania funkcji softmin do n-wymiarowego tensora wejściowego w celu ich przeskalowania. Następnie elementy n-wymiarowego Tensora wyjściowego mieszczą się w zakresie 0, 1 i sumują się do 1. Softmin definiuje się jako: | |
2) palnik.nn.Softmax | Służy do zastosowania funkcji softmax do n-wymiarowego tensora wejściowego w celu ich przeskalowania. Następnie elementy n-wymiarowego Tensora wyjściowego mieszczą się w zakresie 0, 1 i sumują się do 1. Softmax definiuje się jako: | |
3) palnik.nn.Softmax2d | Służy do stosowania SoftMax na funkcjach do każdej lokalizacji przestrzennej. | |
4) palnik.nn.LogSoftmax | Służy do zastosowania funkcji LogSoftmax do n-wymiarowego tensora wejściowego. Funkcję LofSoftmax można zdefiniować jako: | |
5) torch.nn.AdaptiveLogSoftmaxWithLoss | Jest to strategia uczenia modeli z dużymi przestrzeniami wyjściowymi. Jest bardzo skuteczny, gdy rozkład etykiet jest bardzo niezrównoważony | |
8. | Warstwy normalizacyjne | |
1) palnik.nn.BatchNorm1d | Służy do stosowania normalizacji wsadowej na wejściach 2D lub 3D. | |
2) palnik.nn.BatchNorm2d | Służy do stosowania normalizacji wsadowej w 4D. | |
3) palnik.nn.BatchNorm3d | Służy do stosowania normalizacji wsadowej na wejściach 5D. | |
4) palnik.nn.GroupNorm | Służy do stosowania normalizacji grupowej na mini-partii danych wejściowych. | |
5) torch.nn.SyncBatchNorm | Służy do stosowania normalizacji wsadowej na danych wejściowych n-wymiarowych. | |
6) palnik.nn.InstanceNorm1d | Służy do stosowania normalizacji instancji na wejściu 3D. | |
7) palnik.nn.InstanceNorm2d | Służy do stosowania normalizacji instancji na wejściu 4D. | |
8) latarka.nn.InstanceNorm3d | Służy do stosowania normalizacji instancji na wejściu 5D. | |
9) palnik.nn.LayerNorm | Służy do stosowania normalizacji warstw w mini-partii danych wejściowych. | |
10) latarka.nn.LocalResponseNorm | Służy do stosowania normalizacji odpowiedzi lokalnej na sygnał wejściowy składający się z kilku płaszczyzn wejściowych, gdzie kanał zajmuje drugi wymiar. | |
9. | Powtarzające się warstwy | |
1) latarka.nn.RNN | Służy do zastosowania wielowarstwowego Elmana RNN z nieliniowością tanh lub ReLU do sekwencji wejściowej. Każda warstwa oblicza następującą funkcję dla każdego elementu w sekwencji wejściowej: HT=tanh(WichXT+bich+WggTt-1+bgg) | |
2) latarka.nn.LSTM | Służy do zastosowania wielowarstwowej pamięci długoterminowej (LSTM) RNN do sekwencji wejściowej. Każda warstwa oblicza następującą funkcję dla każdego elementu w sekwencji wejściowej: | |
3) latarka.nn.GRU | Służy do zastosowania wielowarstwowej bramkowanej jednostki rekurencyjnej (GRU) RNN do sekwencji wejściowej. Każda warstwa oblicza następującą funkcję dla każdego elementu w sekwencji wejściowej: | |
4) latarka.nn.RNN Cell | Służy do zastosowania komórki Elmana RNN z nieliniowością tanh lub ReLU do sekwencji wejściowej. Każda warstwa oblicza następującą funkcję dla każdego elementu w sekwencji wejściowej: h'=tanh(Wichx+bich+Wggh+bgg) Zamiast tanh stosuje się ReLU | |
5) palnik.nn.LSTMCell | Służy do zastosowania komórki pamięci długoterminowej (LSTM) do sekwencji wejściowej. Każda warstwa oblicza następującą funkcję dla każdego elementu w sekwencji wejściowej: Gdzie σ jest funkcją sigmoidalną, a * jest iloczynem Hadamarda. | |
6) latarka.nn.GRUCell | Służy do zastosowania bramkowanej komórki rekurencyjnej (GRU) do sekwencji wejściowej. Każda warstwa oblicza następującą funkcję dla każdego elementu w sekwencji wejściowej: | |
10. | Warstwy liniowe | |
1) latarka.nn.Tożsamość | Jest to operator tożsamości zastępczy, który nie uwzględnia argumentów. | |
2) palnik.nn.Liniowy | Służy do zastosowania transformacji liniowej do przychodzących danych: y=xAT+b | |
3) palnik.nn.Dwuliniowy | Służy do zastosowania transformacji dwuliniowej do przychodzących danych: y=x1Topór2+b | |
jedenaście. | Warstwy opuszczania | |
1) latarka.nn.Wyrzut | Służy do regularyzacji i zapobiegania koadaptacji neuronów. Czynnik podczas treningu skaluje wynik. Oznacza to, że moduł oblicza funkcję tożsamości podczas oceny. | |
2) latarka.nn.Dropout2d | Jeśli sąsiednie piksele na mapach obiektów są skorelowane, torch.nn.Dropout nie ureguluje aktywacji i zmniejszy efektywną szybkość uczenia się. W tym przypadku torch.nn.Dropout2d() służy do wspierania niezależności pomiędzy mapami obiektów. | |
3) latarka.nn.Dropout3d | Jeśli sąsiednie piksele na mapach obiektów są skorelowane, torch.nn.Dropout nie ureguluje aktywacji i zmniejszy efektywną szybkość uczenia się. W tym przypadku torch.nn.Dropout2d () służy do wspierania niezależności pomiędzy mapami obiektów. | |
4) latarka.nn.AlphaDropout | Służy do stosowania funkcji Alpha Dropout na wejściu. Alpha Dropout to rodzaj rezygnacji, który zachowuje właściwość samonormalizacji. | |
12. | Rzadkie warstwy | |
1) palnik.nn.Osadzanie | Służy do przechowywania osadzonych słów i pobierania ich za pomocą indeksów. Dane wejściowe modułu to lista indeksów, a wyjściem jest osadzanie odpowiedniego słowa. | |
2) Torch.nn.EmbeddingBag | Służy do obliczania sum lub średniej „torby” osadzania bez tworzenia instancji osadzania pośredniego. | |
13. | Funkcja odległości | |
1) latarka.nn.CosinusPodobieństwo | Zwróci cosinus podobieństwa między x1 i x2, obliczone wzdłuż dim. | |
2) latarka.nn.PairwiseDistance | Oblicza wsadową odległość parami między wektorami v1, v2 przy użyciu normy p: | |
14. | Funkcja straty | |
1) palnik.nn.L1Strata | Służy do kryterium, które mierzy średni błąd bezwzględny pomiędzy każdym elementem na wejściu x i docelowym y. Niezmniejszoną stratę można opisać jako: l(x,y)=L={l1,..., lN},lN=|xN-IN|, Gdzie N jest wielkością partii. | |
2) latarka.nn.MSELStrata | Służy do kryterium, które mierzy średni błąd kwadratowy pomiędzy każdym elementem na wejściu x i docelowym y. Niezmniejszoną stratę można opisać jako: l(x,y)=L={l1,...,lN},lN=(xN-IN)2, Gdzie N jest wielkością partii. | |
3) torch.nn.CrossEntropyLoss | Kryterium to łączy nn.LogSoftmax() i nn.NLLLoss() w jedną klasę. Jest to pomocne, gdy uczymy problem klasyfikacji z klasami C. | |
4) latarka.nn.CTCLStrata | Koneksjonistyczna klasyfikacja czasowa strat oblicza stratę pomiędzy ciągłym szeregiem czasowym a sekwencją docelową. | |
5) latarka.nn.NLLLoss | Ujemna utrata logarytmu wiarygodności jest wykorzystywana do uczenia problemu klasyfikacji z klasami C. | |
6) latarka.nn.PoissonNLLLoss | Ujemna logarytmiczna strata wiarygodności z rozkładem Poissona t target~Poisson(input)loss(input,target)=input-target*log(target!)on jest celem. | |
7) latarka.nn.KLDivLoss | Jest to przydatna miara odległości w przypadku dystrybucji ciągłej, a także przydaje się, gdy przeprowadzamy bezpośrednią regresję po przestrzeni ciągłej dystrybucji wyjściowej. | |
8) latarka.nn.BCELutrata | Służy do tworzenia kryterium mierzącego binarną entropię krzyżową między celem a wyjściem. Niezmniejszoną stratę można opisać jako: l(x,y)=L={l1,...,lN},lN=-wN[IN*logxN+ (1-latN)*log(1-xN)], Gdzie N jest wielkością partii. | |
9) latarka.nn.BCEWithLogitsLoss | Łączy warstwę sigmoidalną i BCELoss w jednej klasie. Możemy skorzystać ze sztuczki log-suma-exp dla stabilności numerycznej, łącząc operację w jedną warstwę. | |
10) torch.nn.MarginRankingLoss | Tworzy kryterium mierzące utratę danych wejściowych x1, x2, dwa tensory mini-wsadowe 1D i tensor mini-wsadowy 1D, które zawierają 1 lub -1. Funkcja straty dla każdej próbki w minipartii jest następująca: strata(x,y)=max(0,-y*(x1-X2)+margines | |
11) palnik.nn.ZawiasUtrata osadzania | HingeEmbeddingLoss mierzy utratę danego tensora wejściowego x i tensora etykiet y, które zawierają 1 lub -1. Służy do pomiaru, czy dwa wejścia są podobne, czy różne. Funkcja straty jest zdefiniowana jako: | |
12) torch.nn.MultiLabelMarginLoss | Służy do stworzenia kryterium optymalizującego wieloklasową, wieloklasyczną utratę zawiasów pomiędzy wejściem x i wyjściem y. | |
13) palnik.nn.SmoothL1Strata | Służy do tworzenia kryterium, które wykorzystuje składnik kwadratowy, jeśli bezwzględny błąd elementarny spadnie poniżej 1, lub składnik L1 w przeciwnym razie. Nazywa się to również stratą Hubera: | |
14) torch.nn.SoftMarginLoss | Służy do stworzenia kryterium optymalizującego straty logistyczne klasyfikacji dwuklasowej pomiędzy tensorem wejściowym x i tensorem docelowym y, które zawierają 1 lub -1. | |
15) torch.nn.MultiLabelSoftMarginLoss | Służy do tworzenia kryterium optymalizującego stratę typu „jeden do wszystkiego” w przypadku wielu etykiet w oparciu o maksymalną entropię między wejściowym x a docelowym y o rozmiarze (N, C). | |
16) latarka.nn.CosinusEmbeddingLoss | Służy do tworzenia kryterium mierzącego utratę zadanych tensorów wejściowych x1, x2 oraz etykiety tensora y o wartościach 1 lub -1. Służy do pomiaru, czy dwa wejścia są podobne, czy różne, przy użyciu odległości cosinus. | |
17) torch.nn.MultiMarginLoss | Służy do stworzenia kryterium optymalizującego utratę zawiasu klasyfikacji wieloklasowej pomiędzy wejściem x i wyjściem y. | |
18) torch.nn.TripletMarginLoss | Służy do tworzenia kryterium mierzącego utratę trójki zadanych tensorów wejściowych x1, x2, x3 i marginesu o wartości większej niż 0. Służy do pomiaru względnego podobieństwa pomiędzy próbkami. Trójka składa się z kotwicy, pozytywnego przykładu i negatywnego przykładu. L(a,p,n)=max{d(aI,PI)-d(aI,NI)+margines,0} | |
piętnaście. | Warstwy widzenia | |
1) latarka.nn.PixelShuffle | Służy do ponownego ułożenia elementów w tensorze kształtu (*, C×r2,H,W) na tensor kształtu (*,C,H×r,W,r) | |
2) latarka.nn.Upsample | Służy do upsamplingu danych wielokanałowych 1D, 2D lub 3D. | |
3) torch.nn.upsamplingNearest2d | Służy do stosowania upsamplingu najbliższego sąsiada 2D do sygnału wejściowego składającego się z wielu kanałów wejściowych. | |
4) torch.nn.UpsamplingBilinear2d | Służy do stosowania dwuliniowego upsamplingu 2D do sygnału wejściowego składającego się z wielu kanałów wejściowych. | |
16. | Warstwy DataParallel (wiele procesorów graficznych, rozproszone) | |
1) palnik.nn.DataParallel | Służy do implementacji równoległości danych na poziomie modułu. | |
2) torch.nn.DistributedDataParallel | Służy do implementacji rozproszonej równoległości danych, która opiera się na pakiecie torch.distributed na poziomie modułu. | |
3) torch.nn.DistributedDataParallelCPU | Służy do implementacji rozproszonej równoległości danych dla procesora na poziomie modułu. | |
17. | Narzędzia | |
1) latarka.nn.clip_grad_norm_ | Służy do obcięcia normy gradientu iterowalnego parametru. | |
2) latarka.nn.clip_grad_value_ | Służy do obcięcia normy gradientu iterowalnego parametru o określonej wartości. | |
3) palnik.nn.parameters_to_vector | Służy do konwersji parametrów na jeden wektor. | |
4) palnik.nn.vector_to_parameters | Służy do konwersji jednego wektora na parametry. | |
5) palnik.nn.weight_norm | Służy do normalizacji wag parametru w danym module. | |
6) palnik.nn.remove_weight_norm | Służy do usunięcia normalizacji wagi i ponownej parametryzacji z modułu. | |
7) latarka.nn.spectral_norm | Służy do zastosowania normalizacji widmowej parametru w danym module. | |
8) torch.nn.PackedSequence | Będzie używany do przechowywania danych i listy rozmiarów partii spakowanej sekwencji. | |
9) torch.nn.pack_padded_sequence | Służy do pakowania Tensora zawierającego wyściełane sekwencje o zmiennej długości. | |
10) torch.nn.pad_packed_sequence | Służy do wypełniania spakowanej partii sekwencji o zmiennej długości. | |
11) torch.nn.pad_sequence | Służy do wypełniania listy tensorów o zmiennej długości wartością dopełnienia. | |
12) torch.nn.pack_sequence | Służy do pakowania listy tensorów o zmiennej długości | |
13) latarka.nn.remove_spectral_norm | Służy do usuwania normalizacji widmowej i ponownej parametryzacji z modułu. |
Odniesienie:
https://pytorch.org/docs/stable/nn.html