Introducere
În lumea în evoluție rapidă a învățării profunde și a rețelelor neuronale, bibliotecile și cadrele sunt esențiale pentru simplificarea și accelerarea procesului de dezvoltare. PyTorch Lightning este o astfel de bibliotecă puternică, construită pe deasupra popularului PyTorch. Lightning este proiectat pentru a le permite oamenilor de știință de date și inginerilor ML să-și scaleze cu ușurință modelele, să evite codul standard și să îmbunătățească lizibilitatea generală. Cu toate acestea, în timp ce lucrați cu PyTorch Lightning, este posibil să vă confruntați adesea cu probleme precum eroarea atributului „pytorch_lightning.metrics”. În acest articol, vom aborda problema și vă vom prezenta soluția acesteia, defalcând codul pentru o mai bună înțelegere. Mai mult, vom discuta despre bibliotecile și funcțiile conexe implicate în rezolvarea acestei probleme.
Soluție pentru problemă
Una dintre principalele probleme legate de eroarea „%27pytorch_lightning%27 nu are atributul %27metrics%27” este că este posibil să fi instalat versiunea mai veche a PyTorch Lightning, care nu includea modulul de metrici. Pentru a remedia acest lucru, puteți pur și simplu să actualizați PyTorch Lightning la cea mai recentă versiune, rulând următoarea comandă:
pip install --upgrade pytorch-lightning
Explicația pas cu pas a codului
După ce ați actualizat biblioteca, putem începe să lucrăm cu valorile bazate pe PyTorch Lightning. Primul pas este importarea modulelor necesare din PyTorch Lightning. Vom folosi metrica Acuratețe în scop ilustrativ în acest articol.
import torch from pytorch_lightning import LightningModule from pytorch_lightning.metrics.functional import accuracy
În continuare, să definim rețeaua noastră neuronală folosind LightningModule ca clasă de bază. În cadrul metodelor „training_step” și „validation_step”, vom calcula predicția și tensorii adevărului de bază și vom calcula acuratețea utilizând funcția metrică „precizie” oferită de 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
În cele din urmă, urmând această structură de cod, ar trebui să puteți lucra fără probleme cu PyTorch Lightning-metrics fără a întâlni eroarea de atribut menționată.
Biblioteci înrudite: Torchmetrics
- O altă bibliotecă demnă de menționat este Torhmetrics, o bibliotecă bazată pe PyTorch specializată în furnizarea de metrici pentru evaluarea modelelor de învățare profundă. Biblioteca Torchmetrics este creată de aceiași dezvoltatori ca PyTorch Lightning, asigurând compatibilitatea și oferind un API simplu și consistent.
- Torchmetrics oferă diverse valori, cum ar fi acuratețea, precizia, rechemarea, scorul F1 și multe altele. Reduce efortul de implementare manuală a acestor valori și vă permite să vă concentrați asupra altor aspecte ale proiectelor dvs.
Îmbunătățirea lizibilității codului cu PyTorch Lightning
Unul dintre avantajele cheie ale utilizării PyTorch Lightning este că simplifică semnificativ structura buclei de antrenament și face codul mai lizibil. LightningModule încapsulează componentele de bază ale unei rețele neuronale, cum ar fi arhitectura modelului, logica de antrenament și logica de validare, oferindu-vă posibilitatea de a gestiona aceste elemente într-un mod modular. Ca rezultat, vă puteți dezvolta și scala modelele mai eficient, oferindu-vă o mai bună înțelegere a codului dvs., îmbunătățind și colaborarea între membrii echipei.