[Snel leren] Inleiding tot Pytorch (XNUMX): Implementeer MLP-regressie en leer de basisprincipes van PyTorch

De vorige keer heb ik besproken hoe ik met de fakkel moet omgaan, wat de basis is van PyTorch.

Deze keer wil ik Multilayer perceptron (MLP) -regressie implementeren in PyTorch en de belangrijkste PyTorch-pakketten bekijken.

Algehele stroom

De algehele stroom van modelimplementatie is als volgt. De nummers tussen haakjes zijn de PyTorch-pakketten die op dat moment werden gebruikt.

  • Aanmaken van invoergegevensset, iteratieve verwerking (Dataset, Dataloader)
  • Definitie van neuraal netwerk (nn. Module)
  • Verliesberekening, gradiënt gepropageerd naar netwerkparameters (nr. Module)
  • Update netwerkgewichten (Optimaizer)

Grote PyTorch-pakketten

Ongeacht PyTorch bieden veel deep learning-frameworks verschillende pakketten om de implementatie te vereenvoudigen. De belangrijkste items in PyTorch zijn:

toorts. sensorMultidimensionale reeks. Gegevensstructuur gebruikt in PyTorch.
fakkel.autogradImplementeer voorwaartse / achterwaartse voortplanting.Ondersteunt automatische differentiatie voor Tensor, zoals achterwaartse propagatie (backward ()).
zaklamp.utils.dataHet bevat hulpprogramma's zoals "Dataset" die de in te voeren gegevens en het label ervan als een set verzamelt, en "Dataloader" die gegevens uit de Dataset in een minibatch haalt en aan het model doorgeeft.
zaklamp.nn.ModuleWordt gebruikt voor het bouwen van neurale netwerken.Verantwoordelijk voor parameterinkapseling zoals opslaan en laden van modellen en verhuizen naar GPU.
fakkel.optimHiermee kunt u algoritmen voor parameteroptimalisatie gebruiken, zoals SDG en Adam.
Grote PyTorch-pakketten

Model implementatie

Een dataset maken

Deze keer zullen we sin (5x) plus willekeurige getallen voorbereiden als oefengegevens met numpy.from_numpy()Omzetten naar torch.tensor met.

Model definitie

In pytorch wordt het model gedefinieerd als een "python class" die erft van de nn.Module class.

klasse MLP (nn.Module): De gedefinieerde MLP-klasse erft van de bovenliggende klasse nn.Module
def init (): Ontvangt argumenten en instantiëert
super (MLP, zelf) .init (): Overnemen bovenliggende klasse met superfunctie
def vooruit (zelf, x): Werkt wanneer de functie wordt aangeroepen na instantiatie. Wanneer u de voorwaartse functie definieert, wordt ook de achterwaartse functie (hellingsberekening) automatisch gedefinieerd.

.parameters()U kunt de structuur en parameters van het netwerk ophalen met.

Verliesberekening / backpropagation / gewichtsupdate

Om het individuele gedrag te begrijpen, nemen we een stukje gegevens van x en voeren dit in het neurale netwerk in om te zien hoe de parameters veranderen als gevolg van foutberekeningen en gewichtsupdates.

Probeer de leerlus om te draaien

Voer de bovenstaande stroom uit voor elke batch om het neurale netwerk te trainen.
DatasetRetourneert een set gegevens en het bijbehorende label,DataLoaderIs een klasse die gegevens in batchgrootte retourneert.

Visualisatie van rekengrafiek

De structuur van de drielaagse MLP die deze keer is gemaakt, kan worden gevisualiseerd met behulp van een python-pakket genaamd torchviz.parameters()Alsjeblieft als het niet genoeg is.

Tot nu toe hebben we PyTorch en zijn belangrijkste PyTorch-pakketten geïdentificeerd door de implementatie van MLP-regressie.