
在快速發展的深度學習和神經網絡世界中,庫和框架對於簡化和加速開發過程至關重要。 PyTorch Lightning 就是這樣一個建立在廣受歡迎的 PyTorch 之上的強大庫。 Lightning 旨在讓數據科學家和 ML 工程師輕鬆擴展他們的模型,避免樣板代碼,並提高整體可讀性。 但是,在使用 PyTorch Lightning 時,您可能經常會發現自己面臨諸如“pytorch_lightning.metrics”屬性錯誤之類的問題。 在本文中,我們將解決這個問題並引導您完成它的解決方案,分解代碼以便更好地理解。 此外,我們將討論解決此問題所涉及的相關庫和函數。
問題的解決方案
與錯誤“%27pytorch_lightning%27 沒有屬性 %27metrics%27”相關的主要問題之一是您可能安裝了不包含指標模塊的舊版本 PyTorch Lightning。 要解決此問題,您只需運行以下命令即可將 PyTorch Lightning 升級到最新版本:
pip install --upgrade pytorch-lightning
代碼的逐步解釋
更新庫後,我們就可以開始使用基於 PyTorch Lightning 的指標。 第一步是從 PyTorch Lightning 導入必要的模塊。 在本文中,我們將使用準確度指標進行說明。
import torch from pytorch_lightning import LightningModule from pytorch_lightning.metrics.functional import accuracy
接下來,讓我們使用 LightningModule 作為基類來定義我們的神經網絡。 在“training_step”和“validation_step”方法中,我們將計算我們的預測和真實張量,並使用 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
最後,遵循此代碼結構,您應該能夠順利使用 PyTorch Lightning-metrics 而不會遇到上述屬性錯誤。
相關庫:Torchmetrics
- 另一個值得一提的庫是 火炬計量學,一個基於 PyTorch 的庫,專門提供用於評估深度學習模型的指標。 Torchmetrics 庫由與 PyTorch Lightning 相同的開發人員創建,確保兼容性並提供簡單一致的 API。
- Torchmetrics 提供各種指標,如準確性、精確度、召回率、F1 分數等等。 它減少了手動實施這些指標的壓力,並允許您專注於項目的其他方面。
使用 PyTorch Lightning 增強代碼可讀性
使用 PyTorch Lightning 的主要好處之一是它顯著簡化了訓練循環結構並使代碼更具可讀性。 LightningModule 封裝了神經網絡的核心組件,例如模型架構、訓練邏輯和驗證邏輯,使您能夠以模塊化方式管理這些元素。 因此,您可以更高效地開發和擴展模型,讓您更好地理解代碼,同時改善團隊成員之間的協作。