PyTorchiga alustamine 5 sammuga – KDnuggets

PyTorchiga alustamine 5 sammuga – KDnuggets

Allikasõlm: 2909439

PyTorchiga alustamine 5 sammuga

PyTorchiga alustamine 5 sammuga
 

PyTorch on populaarne avatud lähtekoodiga masinõpperaamistik, mis põhineb Pythonil ja on optimeeritud GPU-kiirendatud andmetöötluse jaoks. Algselt 2016. aastal Meta AI poolt välja töötatud ja nüüdseks Linuxi sihtasutuse osaks olev PyTorch on kiiresti muutunud üheks kõige laialdasemalt kasutatavaks süvaõppe uurimise ja rakenduste raamistikuks.

Erinevalt mõnest teisest raamistikust, nagu TensorFlow, kasutab PyTorch dünaamilisi arvutusgraafikuid, mis võimaldavad suuremat paindlikkust ja silumisvõimalusi. PyTorchi peamised eelised on järgmised:

  • Lihtne ja intuitiivne Pythoni API närvivõrkude loomiseks
  • Lai toetus GPU/TPU kiirendusele
  • Sisseehitatud tugi automaatseks eristamiseks
  • Jaotatud koolitusvõimalused
  • Koostalitlusvõime teiste Pythoni raamatukogudega, nagu NumPy

PyTorchi välk on PyTorchi peale ehitatud kerge ümbris, mis lihtsustab veelgi uurija töövoo ja mudeli arendamise protsessi. Lightningi abil saavad andmeteadlased keskenduda pigem mudelite kujundamisele kui standardkoodile. Lightningi peamised eelised on järgmised:

  • Pakub struktuuri PyTorchi koodi korraldamiseks
  • Käsitseb treeningtsükli katlakoodi
  • Kiirendab uurimiskatseid hüperparameetrite häälestamisega
  • Lihtsustab mudeli skaleerimist ja juurutamist

Ühendades PyTorchi võimsuse ja paindlikkuse Lightningi kõrgetasemeliste API-dega, saavad arendajad kiiresti luua skaleeritavaid süvaõppesüsteeme ja itereerida kiiremini.

To start using PyTorch and Lightning, you’ll first need to install a few prerequisites:

  • Python 3.6 või uuem
  • Pip-paketi installija
  • Kiirendatud toimingute jaoks on soovitatav kasutada NVidia GPU-d (ainult protsessoriga seadistamine on võimalik, kuid aeglasem)

Pythoni ja PyTorchi installimine

It’s recommended to use Anaconda for setting up a Python environment for data science and deep learning workloads. Follow the steps below:

  • Laadige alla ja installige oma OS-i jaoks Anaconda aadressilt siin
  • Looge Conda keskkond (või kasutage mõnda muud Pythoni keskkonnahaldurit): conda create -n pytorch python=3.8
  • Aktiveerige keskkond: conda activate pytorch
  • Installige PyTorch: conda install pytorch torchvision torchaudio -c pytorch

Kontrollige, kas PyTorch on õigesti installitud, käivitades Pythonis kiirtesti:

import torch
x = torch.rand(3, 3)
print(x)

This will print out a random 3×3 tensor, confirming PyTorch is working properly.

PyTorch Lightningi installimine

Kui PyTorch on installitud, saame nüüd installida Lightningi pipi abil:

pip install lightning-ai

Let’s confirm Lightning is set up correctly:

import lightning_ai
print(lightning_ai.__version__)

See peaks välja printima versiooninumbri, näiteks 0.6.0.

Now we’re ready to start building deep learning models.

PyTorch kasutab põhiandmestruktuurina tensoreid, mis on sarnased NumPy massiividega. Tensoreid saavad kasutada GPU-d ja need toetavad närvivõrkude ehitamisel automaatset eristamist.

Let’s define a simple neural network for image classification:

import torch
import torch.nn as nn
import torch.nn.functional as F class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = torch.flatten(x, 1) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net()

See määratleb kahe konvolutsioonikihi ja kolme täielikult ühendatud kihiga konvolutsioonilise närvivõrgu 10 klassi klassifitseerimiseks. The forward() meetod määrab, kuidas andmed võrgu kaudu liiguvad.

Nüüd saame seda mudelit Lightningi abil näidisandmete põhjal treenida.

Välk pakub a LightningModule class to encapsulate PyTorch model code and the training loop boilerplate. Let’s convert our model:

import pytorch_lightning as pl class LitModel(pl.LightningModule): def __init__(self): super().__init__() self.model = Net() def forward(self, x): return self.model(x) def training_step(self, batch, batch_idx): x, y = batch y_hat = self.forward(x) loss = F.cross_entropy(y_hat, y) return loss def configure_optimizers(self): return torch.optim.Adam(self.parameters(), lr=0.02) model = LitModel()

. training_step() määrab edasipääsu ja kaotuse arvutamise. Seadistame Adam optimeerija õppimiskiirusega 0.02.

Nüüd saame seda mudelit hõlpsalt treenida:

trainer = pl.Trainer()
trainer.fit(model, train_dataloader, val_dataloader)

Treener tegeleb ajastu loopimise, valideerimise ja logimisega automaatselt. Testiandmete põhjal saame mudelit hinnata:

result = trainer.test(model, test_dataloader)
print(result)

Võrdluseks siin on võrgu- ja treeningahela kood puhtas PyTorchis:

import torch
import torch.nn.functional as F
from torch.utils.data import DataLoader # Assume Net class and train_dataloader, val_dataloader, test_dataloader are defined class Net(torch.nn.Module): # Define your network architecture here pass # Initialize model and optimizer
model = Net()
optimizer = torch.optim.Adam(model.parameters(), lr=0.02) # Training Loop
for epoch in range(10): # Number of epochs for batch_idx, (x, y) in enumerate(train_dataloader): optimizer.zero_grad() y_hat = model(x) loss = F.cross_entropy(y_hat, y) loss.backward() optimizer.step() # Validation Loop
model.eval()
with torch.no_grad(): for x, y in val_dataloader: y_hat = model(x) # Testing Loop and Evaluate
model.eval()
test_loss = 0
with torch.no_grad(): for x, y in test_dataloader: y_hat = model(x) test_loss += F.cross_entropy(y_hat, y, reduction='sum').item()
test_loss /= len(test_dataloader.dataset)
print(f"Test loss: {test_loss}")

Lightning muudab PyTorchi mudeli arendamise uskumatult kiireks ja intuitiivseks.

Lightning pakub palju sisseehitatud võimalusi hüperparameetrite häälestamiseks, ülepaigutamise vältimiseks ja mudeli haldamiseks.

Hüperparameetrite häälestamine

We can optimize hyperparameters like learning rate using Lightning’s tuner moodul:

tuner = pl.Tuner(trainer)
tuner.fit(model, train_dataloader)
print(tuner.results)

See teostab Bayesi otsingu hüperparameetriruumis.

Overfitting käsitsemine

Sellised strateegiad nagu väljalangevad kihid ja varajane peatumine võivad vähendada ülepaigutamist:

model = LitModel()
model.add_module('dropout', nn.Dropout(0.2)) # Regularization trainer = pl.Trainer(early_stop_callback=True) # Early stopping

Mudeli salvestamine ja laadimine

Lightning muudab mudelite salvestamise ja uuesti laadimise lihtsaks:

# Save
trainer.save_checkpoint("model.ckpt") # Load
model = LitModel.load_from_checkpoint(checkpoint_path="model.ckpt")

See säilitab mudeli täieliku oleku ja hüperparameetrid.

Nii PyTorch kui ka PyTorch Lightning on võimsad süvaõppe teegid, kuid need teenivad erinevaid eesmärke ja pakuvad ainulaadseid funktsioone. Kui PyTorch pakub põhiplokke süvaõppemudelite kujundamiseks ja juurutamiseks, siis PyTorch Lightningi eesmärk on lihtsustada mudelikoolituse korduvaid osi, kiirendades seeläbi arendusprotsessi.

Peamised erinevused

Siin on PyTorchi ja PyTorch Lightningi peamiste erinevuste kokkuvõte:

tunnusjoon PyTorch PyTorchi välk
Treeningsilmus Käsitsi kodeeritud Automatiseeritud
Katlaplaadi kood Nõutud Miinimum
Hüperparameetrite häälestamine Käsitsi seadistamine Sisseehitatud tugi
Hajutatud koolitus Saadaval, kuid käsitsi seadistatav Automatiseeritud
Koodi organisatsioon Konkreetne struktuur puudub Soodustab modulaarset disaini
Mudeli salvestamine ja laadimine Vajalik kohandatud rakendamine Lihtsustatud kontrollpunktidega
Silumine Täiustatud, kuid käsitsi Sisseehitatud palkidega on lihtsam
GPU/TPU tugi Mudelipõhine Lihtsam seadistamine

Paindlikkus vs mugavus

PyTorch on tuntud oma paindlikkuse poolest, eriti dünaamiliste arvutusgraafikutega, mis sobib suurepäraselt uurimiseks ja katsetamiseks. Kuid see paindlikkus tuleb sageli maksta rohkem standardkoodi kirjutamise hinnaga, eriti treeningtsükli, hajutatud treeningu ja hüperparameetrite häälestamise jaoks. Teisest küljest võtab PyTorch Lightning suure osa sellest katlaplaadist ära, võimaldades samas vajadusel täielikku kohandamist ja juurdepääsu madalama taseme PyTorchi API-dele.

Arengu kiirus

If you’re starting a project from scratch or conducting complex experiments, PyTorch Lightning can save you a lot of time. The LightningModule class streamlines the training process, automates logging, and even simplifies distributed training. This allows you to focus more on your model architecture and less on the repetitive aspects of model training and validation.

Kohtuotsus

Kokkuvõttes pakub PyTorch üksikasjalikumat juhtimist ja sobib suurepäraselt teadlastele, kes vajavad sellist üksikasjalikkust. PyTorch Lightning on aga loodud selleks, et muuta uurimistööst tootmiseni kulgev tsükkel sujuvamaks ja kiiremaks, ilma et see võtaks ära PyTorchi pakutavat jõudu ja paindlikkust. See, kas valite PyTorchi või PyTorch Lightningi, sõltub teie konkreetsetest vajadustest, kuid hea uudis on see, et saate hõlpsalt nende kahe vahel vahetada või isegi kasutada neid oma projekti erinevate osade jaoks koos.

Selles artiklis käsitlesime PyTorchi ja PyTorch Lightningi süvaõppeks kasutamise põhitõdesid.

  • PyTorch pakub võimsat ja paindlikku raamistikku närvivõrkude loomiseks
  • PyTorch Lightning lihtsustab koolituse ja mudelite arendamise töövooge
  • Põhifunktsioonid, nagu hüperparameetrite optimeerimine ja mudelihaldus, kiirendavad süvaõppe uurimist

Nende vundamentide abil saate hakata ehitama ja koolitama täiustatud mudeleid, nagu CNN-id, RNN-id, GAN-id ja palju muud. Aktiivne avatud lähtekoodiga kogukond pakub ka Lightningi tuge ja täiendusi, nagu komponendi- ja optimeerimisteek Bolt.

Head sügavat õppimist!

 
 
Matthew Mayo (@mattmayo13) omab arvutiteaduse magistrikraadi ja andmekaevandamise magistrikraadi. KDnuggetsi peatoimetajana püüab Matthew muuta keerukad andmeteaduse kontseptsioonid kättesaadavaks. Tema erialaste huvide hulka kuuluvad loomuliku keele töötlemine, masinõppe algoritmid ja areneva AI uurimine. Teda juhib missioon demokratiseerida teadmisi andmeteaduse kogukonnas. Matthew on kodeerinud alates 6. eluaastast.
 

Ajatempel:

Veel alates KDnuggets