PyTorch предоставя модула torch.nn, за да ни помогне при създаването и обучението на невронната мрежа. Първо ще обучим основната невронна мрежа върху набора от данни MNIST, без да използваме функции от тези модели. Ще използваме само основната тензорна функционалност на PyTorch и след това постепенно ще добавяме по една функция от torch.nn наведнъж.
torch.nn ни предоставя много повече класове и модули за внедряване и обучение на невронната мрежа.
Пакетът nn съдържа следните модули и класове:
Да не | Клас и модул | Описание |
---|---|---|
1. | факел.nn.Параметър | Това е вид тензор, който трябва да се разглежда като модулен параметър. |
2. | Контейнери | |
1) факел.nn.Модул | Това е базов клас за всички модули на невронни мрежи. | |
2) факел.nn.Последователен | Това е последователен контейнер, в който модулите ще се добавят в същия ред, в който са предадени в конструктора. | |
3) torch.nn.ModuleList | Това ще съдържа подмодули в списък. | |
4) torch.nn.ModuleDict | Това ще съдържа подмодули в директория. | |
5) torch.nn.ParameterList | Това ще задържи параметрите в списък. | |
6) torch.nn.parameterDict | Това ще задържи параметрите в директория. | |
3. | Конволюционни слоеве | |
1) torch.nn.Conv1d | Този пакет ще се използва за прилагане на 1D конволюция върху входен сигнал, съставен от няколко входни равнини. | |
2) torch.nn.Conv2d | Този пакет ще се използва за прилагане на 2D конволюция върху входен сигнал, съставен от няколко входни равнини. | |
3) torch.nn.Conv3d | Този пакет ще се използва за прилагане на 3D конволюция върху входен сигнал, съставен от няколко входни равнини. | |
4) torch.nn.ConvTranspose1d | Този пакет ще се използва за прилагане на 1D транспониран конволюционен оператор върху входно изображение, съставено от няколко входни равнини. | |
5) torch.nn.ConvTranspose2d | Този пакет ще се използва за прилагане на 2D транспониран конволюционен оператор върху входно изображение, съставено от няколко входни равнини. | |
6) torch.nn.ConvTranspose3d | Този пакет ще се използва за прилагане на 3D транспониран оператор за навиване върху входно изображение, съставено от няколко входни равнини. | |
7) факла.nn.Разгънете | Използва се за извличане на плъзгащи се локални блокове от пакетен входен тензор. | |
8) факла.nn.Сгъване | Използва се за комбиниране на масив от плъзгащи се локални блокове в голям съдържащ тензор. | |
4. | Обединяване на слоеве | |
1) torch.nn.MaxPool1d | Използва се за прилагане на 1D max групиране върху входен сигнал, съставен от няколко входни равнини. | |
2) torch.nn.MaxPool2d | Използва се за прилагане на 2D max групиране върху входен сигнал, съставен от няколко входни равнини. | |
3) torch.nn.MaxPool3d | Използва се за прилагане на 3D max групиране върху входен сигнал, съставен от няколко входни равнини. | |
4) torch.nn.MaxUnpool1d | Използва се за изчисляване на частичната обратна стойност на MaxPool1d. | |
5) torch.nn.MaxUnpool2d | Използва се за изчисляване на частичната обратна стойност на MaxPool2d. | |
6) torch.nn.MaxUnpool3d | Използва се за изчисляване на частичната обратна стойност на MaxPool3d. | |
7) torch.nn.AvgPool1d | Използва се за прилагане на 1D средно обединяване върху входен сигнал, съставен от няколко входни равнини. | |
8) torch.nn.AvgPool2d | Използва се за прилагане на 2D средно обединяване върху входен сигнал, съставен от няколко входни равнини. | |
9) torch.nn.AvgPool3d | Използва се за прилагане на 3D средно обединяване върху входен сигнал, съставен от няколко входни равнини. | |
10) torch.nn.FractionalMaxPool2d | Използва се за прилагане на 2D фракционно максимално обединяване върху входен сигнал, съставен от няколко входни равнини. | |
11) torch.nn.LPPool1d | Използва се за прилагане на 1D обединяване на средна мощност върху входен сигнал, съставен от няколко входни равнини. | |
12) torch.nn.LPPool2d | Използва се за прилагане на 2D обединяване на средната мощност върху входен сигнал, съставен от няколко входни равнини. | |
13) torch.nn.AdavtiveMaxPool1d | Използва се за прилагане на 1D адаптивно максимално обединяване върху входен сигнал, съставен от няколко входни равнини. | |
14) torch.nn.AdavtiveMaxPool2d | Използва се за прилагане на 2D адаптивно максимално обединяване върху входен сигнал, съставен от няколко входни равнини. | |
15) torch.nn.AdavtiveMaxPool3d | Използва се за прилагане на 3D адаптивно максимално обединяване върху входен сигнал, съставен от няколко входни равнини. | |
16) torch.nn.AdavtiveAvgPool1d | Използва се за прилагане на 1D адаптивно средно обединяване върху входен сигнал, съставен от няколко входни равнини. | |
17) torch.nn.AdavtiveAvgPool2d | Използва се за прилагане на 2D адаптивно средно обединяване върху входен сигнал, съставен от няколко входни равнини. | |
18) torch.nn.AdavtiveAvgPool3d | Използва се за прилагане на 3D адаптивно средно обединяване върху входен сигнал, съставен от няколко входни равнини. | |
5. | Подложни слоеве | |
1) torch.nn.ReflectionPad1d | Той ще подпълни входния тензор, използвайки отражението на входната граница. | |
2) torch.nn.ReflactionPad2d | Той ще подпълни входния тензор, използвайки отражението на входната граница. | |
3) torch.nn.ReplicationPad1 | Той ще подпълни входния тензор, като използва репликацията на входната граница. | |
4) torch.nn.ReplicationPad2d | Той ще подпълни входния тензор, като използва репликацията на входната граница. | |
5) torch.nn.ReplicationPad3d | Той ще подпълни входния тензор, като използва репликацията на входната граница. | |
6) torch.nn.ZeroPad2d | Той ще подпълни границите на входния тензор с нула. | |
7) torch.nn.ConstantPad1d | Той ще подпълни границите на входния тензор с постоянна стойност. | |
8) torch.nn.ConstantPad2d | Той ще подпълни границите на входния тензор с постоянна стойност. | |
9) torch.nn.ConstantPad3d | Той ще подпълни границите на входния тензор с постоянна стойност. | |
6. | Нелинейни активации (претеглена сума, нелинейност) | |
1) факла.nn.ELU | Той ще използва за прилагане на елементната функция: ELU(x)=max(0,x)+min(0,α*(exp(x)-1)) | |
2) факел.nn.Hardshrink | Той ще използва за прилагане на функцията за твърдо свиване по елемент: | |
3) факла.nn.LeakyReLU | Той ще използва за прилагане на елементната функция: LeakyReLu(x)=max(0,x) +отрицателен_наклон*мин(0,x) | |
4) torch.nn.LogSigmoid | Той ще използва за прилагане на елементната функция: | |
5) факла.nn.MultiheadAttention | Използва се, за да позволи на модела да се грижи за информация от различни подпространства на представяне | |
6) факла.nn.PReLU | Ще се използва за прилагане на функцията по елементи: PReLU(x)=max(0,x)+a*min(0,x) | |
7) факла.nn.ReLU | Той ще използва за прилагане на функцията на коригираната линейна единица по елемент: ReLU(x)=max(0,x) | |
8) факла.nn.ReLU6 | Ще се използва за прилагане на функцията по елементи: ReLU6(x)=min(max(0,x),6) | |
9) факла.nn.RReLU | Той ще се използва за прилагане на рандомизираната функция на течаща ректифицирана линейна единица, по елементи, както е описано в документа: | |
10) факла.nn.SELU | Ще се използва за прилагане на функцията по елементи като: SELU(x)=мащаб*(max(0,x)+ min(0,a*(exp(x)-1))) Тук α= 1.6732632423543772848170429916717 и мащаб = 1.0507009873554804934193349852946. | |
11) факла.nn.TARGET | Ще се използва за прилагане на функцията по елементи като: | |
12) факла.nn.Sigmoid | Ще се използва за прилагане на функцията по елементи като: | |
13) факел.nn.Softplus | Ще се използва за прилагане на функцията по елементи като: | |
14) факел.nn.Softshrink | Ще се използва за прилагане на функцията за меко свиване по елементи като: | |
15) torch.nn.Softsign | Ще се използва за прилагане на функцията по елементи като: | |
16) факла.nn.Tanh | Ще се използва за прилагане на функцията по елементи като: | |
17) факла.nn.Tanhshrink | Ще се използва за прилагане на функцията по елементи като: Tanhshrink(x)=x-Tanh(x) | |
18) факла.nn.Праг | Той ще използва за прагове на всеки елемент от входния тензор. Прагът се определя като: | |
7. | Нелинейни активации (други) | |
1) факел.nn.Softmin | Използва се за прилагане на функцията softmin към n-измерен входен тензор, за да ги премащабира. След това елементите на n-мерния изходен тензор се намират в диапазона 0, 1 и сумата до 1. Softmin се определя като: | |
2) факел.nn.Softmax | Използва се за прилагане на функцията softmax към n-измерен входен тензор, за да ги премащабира. След това елементите на n-мерния изходен тензор се намират в диапазона 0, 1 и сумата до 1. Softmax се дефинира като: | |
3) torch.nn.Softmax2d | Използва се за прилагане на SoftMax върху функции към всяко пространствено местоположение. | |
4) torch.nn.LogSoftmax | Използва се за прилагане на функцията LogSoftmax към n-измерен входен тензор. Функцията LofSoftmax може да се дефинира като: | |
5) torch.nn.AdaptiveLogSoftmaxWithLoss | Това е стратегия за обучение на модели с големи изходни пространства. Той е много ефективен, когато разпределението на етикетите е силно небалансирано | |
8. | Слоеве за нормализиране | |
1) torch.nn.BatchNorm1d | Използва се за прилагане на пакетна нормализация върху 2D или 3D входове. | |
2) torch.nn.BatchNorm2d | Използва се за прилагане на партидна нормализация върху 4D. | |
3) torch.nn.BatchNorm3d | Използва се за прилагане на пакетна нормализация върху 5D входове. | |
4) torch.nn.GroupNorm | Използва се за прилагане на групова нормализация върху мини-пакет от входове. | |
5) torch.nn.SyncBatchNorm | Използва се за прилагане на пакетна нормализация върху n-измерни входове. | |
6) torch.nn.InstanceNorm1d | Използва се за прилагане на нормализиране на екземпляр върху 3D вход. | |
7) torch.nn.InstanceNorm2d | Използва се за прилагане на нормализиране на екземпляр върху 4D вход. | |
8) torch.nn.InstanceNorm3d | Използва се за прилагане на нормализация на екземпляр върху 5D вход. | |
9) torch.nn.LayerNorm | Използва се за прилагане на нормализиране на слоя върху мини-пакет от входове. | |
10) torch.nn.LocalResponseNorm | Използва се за прилагане на локална нормализация на отговора върху входен сигнал, който е съставен от няколко входни равнини, където каналът заема второто измерение. | |
9. | Повтарящи се слоеве | |
1) факла.nn.RNN | Използва се за прилагане на многослоен Elman RNN с tanh или ReLU нелинейност към входна последователност. Всеки слой изчислява следната функция за всеки елемент във входната последователност: чT=tanh(WтяххT+бтях+WччTt-1+бчч) | |
2) факла.nn.LSTM | Използва се за прилагане на многослойна дългосрочна памет (LSTM) RNN към входна последователност. Всеки слой изчислява следната функция за всеки елемент във входната последователност: | |
3) факел.nn.GRU | Използва се за прилагане на многослойна затворена рекурентна единица (GRU) RNN към входна последователност. Всеки слой изчислява следната функция за всеки елемент във входната последователност: | |
4) факла.nn.RNNCell | Използва се за прилагане на RNN клетка на Elman с tanh или ReLU нелинейност към входна последователност. Всеки слой изчислява следната функция за всеки елемент във входната последователност: h'=tanh(Wтяхx+bтях+Wччh+bчч) ReLU се използва вместо tanh | |
5) torch.nn.LSTMCell | Използва се за прилагане на клетка с дълга краткосрочна памет (LSTM) към входна последователност. Всеки слой изчислява следната функция за всеки елемент във входната последователност: Където σ е сигмоидната функция, а * е произведението на Адамар. | |
6) факла.nn.GRUCell | Използва се за прилагане на затворена рекурентна единица (GRU) клетка към входна последователност. Всеки слой изчислява следната функция за всеки елемент във входната последователност: | |
10. | Линейни слоеве | |
1) факла.nn.Идентичност | Това е оператор за самоличност на заместител, който не е чувствителен към аргументи. | |
2) факел.nn.Линеен | Използва се за прилагане на линейна трансформация към входящите данни: y=xAT+б | |
3) факел.nn.Bilinear | Използва се за прилагане на билинейна трансформация към входящите данни: y=x1брадва2+б | |
единадесет. | Отпадащи слоеве | |
1) факла.nn.Отпадане | Използва се за регулиране и предотвратяване на коадаптацията на невроните. Фактор на по време на обучение мащабира продукцията. Това означава, че модулът изчислява функция за идентичност по време на оценката. | |
2) torch.nn.Dropout2d | Ако съседни пиксели в рамките на картите на характеристиките са корелирани, тогава torch.nn.Dropout няма да регулира активациите и ще намали ефективната скорост на обучение. В този случай torch.nn.Dropout2d() се използва за насърчаване на независимостта между картите на характеристиките. | |
3) torch.nn.Dropout3d | Ако съседни пиксели в рамките на картите на характеристиките са корелирани, тогава torch.nn.Dropout няма да регулира активациите и ще намали ефективната скорост на обучение. В този случай torch.nn.Dropout2d () се използва за насърчаване на независимостта между картите на характеристиките. | |
4) torch.nn.AlphaDropout | Използва се за прилагане на Alpha Dropout върху входа. Alpha Dropout е тип Dropout, който поддържа свойството за самонормализиране. | |
12. | Редки слоеве | |
1) факел.nn.Вграждане | Използва се за съхраняване на вградени думи и извличането им с помощта на индекси. Входът за модула е списък от индекси, а изходът е вграждането на съответната дума. | |
2) torch.nn.EmbeddingBag | Използва се за изчисляване на суми или средни стойности на „торби“ на вграждане, без да се инстанцира междинното вграждане. | |
13. | Функция за разстояние | |
1) torch.nn.CosineSimilarity | Той ще върне косинусното сходство между x1 и x2, изчислено по dim. | |
2) torch.nn.PairwiseDistance | Той изчислява груповото разстояние по двойки между вектори v1, v2, използвайки p-нормата: | |
14. | Функция на загуба | |
1) факел.nn.L1Загуба | Използва се за критерий, който измерва средната абсолютна грешка между всеки елемент във входа x и целта y. Ненамалената загуба може да се опише като: l(x,y)=L={l1,...,лн},lн=|xн-ин|, Където N е размерът на партидата. | |
2) факел.nn.MSELoss | Използва се за критерий, който измерва средната квадратна грешка между всеки елемент във входа x и целта y. Ненамалената загуба може да се опише като: l(x,y)=L={l1,...,лн},lн=(xн-ин)2, Където N е размерът на партидата. | |
3) torch.nn.CrossEntropyLoss | Този критерий съчетава nn.LogSoftmax() и nn.NLLLoss() в един единствен клас. Полезно е, когато обучаваме класификационен проблем с C класове. | |
4) torch.nn.CTCLoss | Загубата на Connectionist Temporal Classification изчислява загубата между непрекъснат времеви ред и целева последователност. | |
5) torch.nn.NLLLoss | Загубата на отрицателна логаритмична вероятност се използва за обучение на класификационен проблем с C класове. | |
6) факла.nn.PoissonNLLLoss | Отрицателната загуба на логаритмична вероятност с разпределението на Поасон на t target~Poisson(input)loss(input,target)=input-target*log(target!)he target. | |
7) torch.nn.KLDivLoss | Това е полезна мярка за разстояние за непрекъснато разпределение и също така е полезно, когато извършваме директна регресия върху пространството на непрекъснато разпределение на изхода. | |
8) факел.nn.BCELoss | Използва се за създаване на критерий, който измерва двоичната кръстосана ентропия между целта и изхода. Ненамалената загуба може да се опише като: l(x,y)=L={l1,...,лн},lн=-vн[ин*logxн+ (1-гн)*log(1-xн)], Където N е размерът на партидата. | |
9) torch.nn.BCEWithLogitsLoss | Той комбинира сигмоидния слой и BCELoss в един единствен клас. Можем да се възползваме от трика log-sum-exp за числена стабилност, като комбинираме операцията в един слой. | |
10) torch.nn.MarginRankingLoss | Той създава критерий, който измерва загубата на дадени входове x1, x2, два 1D мини-партиден тензора и етикет 1D мини-партиден тензор y, които съдържат 1 или -1. Функцията на загубите за всяка проба в минипартидата е както следва: загуба(x,y)=max(0,-y*(x1-х2)+марж | |
11) torch.nn.HingeEmbeddingLoss | HingeEmbeddingLoss измерва загубата на даден входен тензор x и тензор на етикети y, които съдържат 1 или -1. Използва се за измерване дали два входа са сходни или различни. Функцията на загубата се определя като: | |
12) torch.nn.MultiLabelMarginLoss | Използва се за създаване на критерий, който оптимизира загубата на панта за многокласова мултикласификация между вход x и изход y. | |
13) torch.nn.SmoothL1Loss | Използва се за създаване на критерий, който използва член на квадрат, ако абсолютната елементна грешка падне под 1, и термин L1 в противен случай. Известна е също като загуба на Huber: | |
14) torch.nn.SoftMarginLoss | Използва се за създаване на критерий, който оптимизира логистичната загуба на двукласова класификация между входния тензор x и целевия тензор y, които съдържат 1 или -1. | |
15) torch.nn.MultiLabelSoftMarginLoss | Използва се за създаване на критерий, който оптимизира загубата с множество етикети едно срещу всички въз основа на максимална ентропия между вход x и целеви y с размер (N, C). | |
16) torch.nn.CosineEmbeddingLoss | Използва се за създаване на критерий, който измерва загубата на дадени входни тензори x1, x2 и етикет на тензор y със стойности 1 или -1. Използва се за измерване дали два входа са подобни или различни, като се използва косинусното разстояние. | |
17) torch.nn.MultiMarginLoss | Използва се за създаване на критерий, който оптимизира загуба на шарнирна шарнирна класификация между вход x и изход y. | |
18) torch.nn.TripletMarginLoss | Използва се за създаване на критерий, който измерва триплетната загуба на дадени входни тензори x1, x2, x3 и марж със стойност, по-голяма от 0. Използва се за измерване на относително сходство между проби. Триплетът се състои от котва, положителен пример и отрицателен пример. L(a,p,n)=max{d(aаз,страз)-d(aаз,наз)+марж,0} | |
петнадесет. | Слоеве на зрението | |
1) torch.nn.PixelShuffle | Използва се за пренареждане на елементите в тензор с форма (*,C×r2,H,W) към тензор с форма (*,C,H×r,W,r) | |
2) факла.nn.Upsample | Използва се за преобразуване на дадени многоканални 1D, 2D или 3D данни. | |
3) torch.nn.upsamplingNearest2d | Използва се за прилагане на 2D дискретизация на най-близкия съсед към входен сигнал, който е съставен от множество входни канали. | |
4) torch.nn.UpsamplingBilinear2d | Използва се за прилагане на 2D билинеарно повишаване на дискретизацията към входен сигнал, който е съставен с множество входни канали. | |
16. | DataParallel слоеве (мулти-GPU, разпределен) | |
1) torch.nn.DataParallel | Използва се за реализиране на паралелизъм на данните на ниво модул. | |
2) torch.nn.DistributedDataParallel | Използва се за реализиране на паралелизъм на разпределени данни, който се основава на пакета torch.distributed на ниво модул. | |
3) torch.nn.DistributedDataParallelCPU | Използва се за реализиране на паралелизъм на разпределени данни за процесора на ниво модул. | |
17. | Помощни програми | |
1) torch.nn.clip_grad_norm_ | Използва се за изрязване на нормата на градиента на итерируем от параметри. | |
2) torch.nn.clip_grad_value_ | Използва се за изрязване на нормата на градиента на итерируем от параметри при определената стойност. | |
3) torch.nn.parameters_to_vector | Използва се за преобразуване на параметри в един вектор. | |
4) torch.nn.vector_to_parameters | Използва се за преобразуване на един вектор в параметрите. | |
5) горелка.nn.тегло_норма | Използва се за прилагане на нормализиране на теглото към параметър в дадения модул. | |
6) torch.nn.remove_weight_norm | Използва се за премахване на нормализирането на теглото и повторното параметризиране от модул. | |
7) факел.nn.спектрална_норма | Използва се за прилагане на спектрална нормализация към параметър в дадения модул. | |
8) torch.nn.PackedSequence | Той ще използва за съхранение на данните и списъка с batch_sizes на пакетирана последователност. | |
9) torch.nn.pack_padded_sequence | Използва се за пакетиране на тензор, съдържащ подплатени последователности с променлива дължина. | |
10) torch.nn.pad_packed_sequence | Използва се за допълване на опакована партида от последователности с променлива дължина. | |
11) torch.nn.pad_sequence | Използва се за допълване на списък с тензори с променлива дължина със стойност за допълване. | |
12) torch.nn.pack_sequence | Използва се за пакетиране на списък с тензори с променлива дължина | |
13) torch.nn.remove_spectral_norm | Използва се за премахване на спектралната нормализация и повторна параметризация от модул. |
Справка:
https://pytorch.org/docs/stable/nn.html