fastai2.3运行Kaggle项目报PathOrStr未定义NameError怎么解决
fastai 2.3版本
PathOrStr未定义报错修复方案 错误根因
PathOrStr类型别名在fastai 1.x版本属于顶层公开API,2.x版本已迁移至fastai.data.transforms模块,未显式导入会触发未定义报错- 你将1.x版本的
ImageList直接替换为ImageDataLoaders的操作不符合版本迁移逻辑:ImageList是1.x中负责自定义图像加载逻辑的集合类,ImageDataLoaders是2.x中用于快速生成数据加载器的高阶封装API,二者功能定位完全不同,不能直接替换
修复步骤
1. 导入正确依赖
首先添加PathOrStr的导入声明:
# 原有fastai.vision相关导入保留,新增以下导入 from fastai.data.transforms import PathOrStr
2. 调整自定义加载类的实现逻辑
fastai 2.x版本中自定义图像加载逻辑推荐使用DataBlock+自定义Image类的方式实现,对应原有逻辑的改造代码如下:
# 自定义图像类实现原有open方法的逻辑 class MyCustomImage(PILImage): @classmethod def create(cls, fn: PathOrStr, **kwargs) -> Image: # 此处写入你原来open方法中的自定义加载逻辑 pass # 用DataBlock构建数据流水线 dblock = DataBlock( blocks=(ImageBlock(cls=MyCustomImage), CategoryBlock), get_items=get_image_files, splitter=RandomSplitter(valid_pct=0.2), get_y=parent_label, item_tfms=Resize(224) ) # 生成最终的DataLoaders dls = dblock.dataloaders("你的图像数据集根目录路径")
验证
运行改造后的代码,PathOrStr未定义报错会消失,自定义图像加载逻辑可正常执行。
内容的提问来源于stack exchange,提问作者robel
相关产品推荐
相关产品推荐

