如何将PyTorch自定义数据集的DataLoader适配fastai,解决after_batch报错?
问题原因
你遇到的报错是因为fastai的DataLoaders容器不接受原生PyTorch的torch.utils.data.DataLoader实例:fastai封装了自己的DataLoader实现,内置了after_batch等回调相关的属性用于训练流程控制,原生PyTorch的DataLoader没有这些扩展属性,因此触发AttributeError。
你已经实现的自定义PyTorch数据集不需要额外添加任何属性,fastai完全兼容原生的PyTorch Dataset,只需要调整DataLoader的创建方式即可。
正确实现方案
方案1:直接用fastai提供的快捷方法生成DataLoaders(推荐)
直接将你已有的训练集、验证集Dataset实例传给DataLoaders.from_dsets方法,fastai会自动生成符合要求的DataLoader:
from fastai.vision.data import DataLoaders # bs对应batch_size,shuffle_train控制训练集是否打乱,验证集默认不打乱 dls = DataLoaders.from_dsets(train_dataset, val_dataset, bs=32, shuffle_train=True, num_workers=2)
方案2:手动创建fastai格式的DataLoader
如果你需要自定义DataLoader的细节逻辑,可以用fastai自带的DataLoader类替代原生PyTorch的实现:
from fastai.data.load import DataLoader as FastaiDataLoader from fastai.vision.data import DataLoaders train_loader = FastaiDataLoader(train_dataset, batch_size=32, shuffle=True, num_workers=2) # 验证集不需要打乱,建议将shuffle设为False val_loader = FastaiDataLoader(val_dataset, batch_size=32, shuffle=False, num_workers=2) dls = DataLoaders(train_loader, val_loader)
调整后再初始化cnn_learner即可正常运行。
内容的提问来源于stack exchange,提问作者jakes
相关产品推荐
相关产品推荐

