使用PyTorch Lightning的validate()函数时遇两类报错求助
PyTorch Lightning validate() 报错解决方法
报错原因与对应解决逻辑
第一个报错:
ValueError: An invalid dataloader was passed to Trainer.validate(dataloaders=...)
根源是调用trainer.validate()时,训练器无法获取验证数据集——既没在LightningModule/LightningDataModule中实现val_dataloader()方法,也没给validate()传入dataloader参数。第二个报错:
Unwrapping the module did not yield a LightningModule
根源是调用validate()时只传了dataloader,未传入你的LightningModule实例,训练器找不到要执行验证的模型。
两种正确实现方式
方式一:在LightningModule中实现val_dataloader()方法
import pytorch_lightning as pl from torchvision.datasets import MNIST from torchvision import transforms from torch.utils.data import DataLoader class MyModel(pl.LightningModule): def __init__(self): super().__init__() # 初始化模型层、损失函数等 self.model = ... self.criterion = ... def val_dataloader(self): transform = transforms.Compose([transforms.ToTensor()]) mnist_val = MNIST(root='data', train=False, download=True, transform=transform) return DataLoader(mnist_val, batch_size=256, num_workers=4) def validation_step(self, batch, batch_idx): # 定义验证逻辑 x, y = batch preds = self.model(x) loss = self.criterion(preds, y) self.log('val_loss', loss) # 初始化模型与训练器 model = MyModel() trainer = pl.Trainer() # 直接调用validate,无需额外传dataloader trainer.validate(model)
方式二:调用validate()时同时传入模型和dataloader
import pytorch_lightning as pl from torchvision.datasets import MNIST from torchvision import transforms from torch.utils.data import DataLoader class MyModel(pl.LightningModule): def __init__(self): super().__init__() self.model = ... self.criterion = ... def validation_step(self, batch, batch_idx): x, y = batch preds = self.model(x) loss = self.criterion(preds, y) self.log('val_loss', loss) # 初始化模型 model = MyModel() # 单独创建验证dataloader transform = transforms.Compose([transforms.ToTensor()]) mnist_val = MNIST(root='data', train=False, download=True, transform=transform) mnist_val_loader = DataLoader(mnist_val, batch_size=256, num_workers=4) trainer = pl.Trainer() # 必须同时传入模型和dataloader参数 trainer.validate(model, dataloaders=mnist_val_loader)
内容的提问来源于stack exchange,提问作者Stefano Borzò
相关产品推荐
相关产品推荐

