
Sparčiai besivystančiame giluminio mokymosi ir neuroninių tinklų pasaulyje bibliotekos ir sistemos yra būtinos norint supaprastinti ir pagreitinti kūrimo procesą. „PyTorch Lightning“ yra viena iš tokių galingų bibliotekų, sukurtų ant plačiai populiaraus „PyTorch“. „Lightning“ sukurtas taip, kad duomenų mokslininkai ir ML inžinieriai galėtų lengvai pakeisti savo modelių mastelį, išvengti pakaitinio kodo ir pagerinti bendrą skaitomumą. Tačiau dirbdami su PyTorch Lightning dažnai galite susidurti su tokiomis problemomis kaip „pytorch_lightning.metrics“ atributo klaida. Šiame straipsnyje mes išspręsime problemą ir paaiškinsime, kaip ją išspręsti, išskaidysime kodą, kad geriau suprastume. Be to, aptarsime susijusias bibliotekas ir funkcijas, susijusias su šios problemos sprendimu.
Problemos sprendimas
Viena iš pagrindinių problemų, susijusių su klaida „%27pytorch_lightning%27 neturi atributo %27metrics%27“, yra ta, kad galbūt įdiegėte senesnę „PyTorch Lightning“ versiją, kurioje nebuvo metrikos modulio. Norėdami tai išspręsti, galite tiesiog atnaujinti PyTorch Lightning į naujausią versiją, vykdydami šią komandą:
pip install --upgrade pytorch-lightning
Žingsnis po žingsnio Kodekso paaiškinimas
Kai atnaujinsite biblioteką, galėsime pradėti dirbti su PyTorch Lightning pagrįsta metrika. Pirmas žingsnis yra būtinų modulių importavimas iš PyTorch Lightning. Šiame straipsnyje iliustravimo tikslais naudosime tikslumo metriką.
import torch from pytorch_lightning import LightningModule from pytorch_lightning.metrics.functional import accuracy
Tada apibrėžkime savo neuroninį tinklą naudodami LightningModule kaip bazinę klasę. „Training_step“ ir „validation_step“ metoduose apskaičiuosime savo numatymo ir pagrindinės tiesos tenzorius ir apskaičiuosime tikslumą naudodami PyTorch Lightning pateiktą „tikslumo“ metrinę funkciją.
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
Galiausiai, vadovaudamiesi šia kodo struktūra, turėtumėte sklandžiai dirbti su PyTorch Lightning-metrics, nepatiriant minėtos atributo klaidos.
Susijusios bibliotekos: Torchmetrics
- Verta paminėti dar vieną biblioteką Torchmetrikai, PyTorch pagrįsta biblioteka, kurios specializacija yra gilaus mokymosi modelių vertinimo metrikas. „Torchmetrics“ biblioteką sukūrė tie patys kūrėjai kaip „PyTorch Lightning“, užtikrindami suderinamumą ir paprastą bei nuoseklią API.
- „Torchmetrics“ siūlo įvairias metrikas, tokias kaip tikslumas, tikslumas, atšaukimas, F1 balas ir daugelis kitų. Tai sumažina įtampą diegiant šias metrikas rankiniu būdu ir leidžia sutelkti dėmesį į kitus projektų aspektus.
Kodo skaitomumo pagerinimas naudojant PyTorch Lightning
Vienas iš pagrindinių „PyTorch Lightning“ naudojimo pranašumų yra tai, kad jis žymiai supaprastina mokymo ciklo struktūrą ir daro kodą skaitomesnį. „LightningModule“ apima pagrindinius neuroninio tinklo komponentus, tokius kaip modelio architektūra, mokymo logika ir patvirtinimo logika, todėl jūs galite valdyti šiuos elementus moduliniu būdu. Dėl to galite efektyviau kurti ir keisti modelius, geriau suprasti savo kodą ir pagerinti komandos narių bendradarbiavimą.