Introduksjon
I den raskt utviklende verden av dyp læring og nevrale nettverk, er biblioteker og rammeverk avgjørende for å forenkle og akselerere utviklingsprosessen. PyTorch Lightning er et så kraftig bibliotek bygget på toppen av den populære PyTorch. Lightning er designet for å tillate dataforskere og ML-ingeniører å enkelt skalere modellene sine, unngå standardkode og forbedre den generelle lesbarheten. Men mens du arbeider med PyTorch Lightning, kan du ofte oppleve problemer som attributtfeilen 'pytorch_lightning.metrics'. I denne artikkelen vil vi takle problemet og lede deg gjennom løsningen, bryte ned koden for bedre forståelse. I tillegg vil vi diskutere relaterte biblioteker og funksjoner som er involvert i å løse dette problemet.
Løsning på problemet
Et av hovedproblemene knyttet til feilen '%27pytorch_lightning%27 har ingen attributt %27metrics%27' er at du kan ha installert den eldre versjonen av PyTorch Lightning som ikke inkluderte metrikkmodulen. For å fikse dette kan du ganske enkelt oppgradere PyTorch Lightning til den nyeste versjonen ved å kjøre følgende kommando:
pip install --upgrade pytorch-lightning
Trinn-for-trinn forklaring av koden
Når du har oppdatert biblioteket, kan vi begynne å jobbe med PyTorch Lightning-baserte beregninger. Det første trinnet er å importere de nødvendige modulene fra PyTorch Lightning. Vi vil bruke nøyaktighetsberegningen til illustrasjonsformål i denne artikkelen.
import torch from pytorch_lightning import LightningModule from pytorch_lightning.metrics.functional import accuracy
La oss deretter definere vårt nevrale nettverk ved å bruke LightningModule som basisklasse. Innenfor metodene 'training_step' og 'validation_step' vil vi beregne våre prediksjons- og grunnsannhetstensorer, og beregne nøyaktigheten ved å bruke den metriske funksjonen 'nøyaktighet' levert av PyTorch Lightning.
class Classifier(LightningModule): def __init__(self): super().__init__() self.layer1 = torch.nn.Linear( 32, 128) self.layer2 = torch.nn.Linear(128, 10) def forward(self, x): x = torch.relu(self.layer1(x)) x = self.layer2(x) return x def training_step(self, batch, batch_idx): x, y = batch y_hat = self(x) loss = torch.nn.functional.cross_entropy(y_hat, y) acc = accuracy(y_hat, y) # Compute accuracy using PyTorch Lightning self.log('train_loss', loss) self.log('train_acc', acc, prog_bar=True) return loss def validation_step(self, batch, batch_idx): x, y = batch y_hat = self(x) loss = torch.nn.functional.cross_entropy(y_hat, y) acc = accuracy(y_hat, y) # Compute accuracy using PyTorch Lightning self.log('val_loss', loss, prog_bar=True) self.log('val_acc', acc, prog_bar=True) return loss
Til slutt, etter denne kodestrukturen, bør du være i stand til å jobbe jevnt med PyTorch Lightning-metrikker uten å møte den nevnte attributtfeilen.
Relaterte biblioteker: Torchmetrics
- Et annet bibliotek verdt å nevne er Torchmetrics, et PyTorch-basert bibliotek som spesialiserer seg på å tilby beregninger for evaluering av dyplæringsmodeller. Torchmetrics-biblioteket er laget av de samme utviklerne som PyTorch Lightning, og sikrer kompatibilitet og gir en enkel og konsistent API.
- Torchmetrics tilbyr ulike beregninger som nøyaktighet, presisjon, tilbakekalling, F1-score og mange flere. Det reduserer belastningen ved å implementere disse beregningene manuelt og lar deg fokusere på andre aspekter av prosjektene dine.
Forbedrer kodelesbarheten med PyTorch Lightning
En av de viktigste fordelene med å bruke PyTorch Lightning er at det forenkler treningssløyfestrukturen betydelig og gjør koden mer lesbar. LightningModule innkapsler kjernekomponentene i et nevralt nettverk, slik som modellarkitekturen, treningslogikken og valideringslogikken, og gir deg muligheten til å administrere disse elementene på en modulær måte. Som et resultat kan du utvikle og skalere modellene dine mer effektivt, noe som gir deg en bedre forståelse av koden din samtidig som du forbedrer samarbeidet mellom teammedlemmer.