Colab运行fastai代码报错无法从fastai.layers导入MSELossFlat
问题场景
在Colab平台运行基于ResNet34的年龄、性别、种族多任务预测开源项目代码,编写如下代码导入依赖库、加载训练集与验证集图像文件:
from fastai import * from fastai.vision import * from fastai.layers import MSELossFlat, CrossEntropyFlat from torchvision import transforms import warnings warnings.filterwarnings("ignore") files_train = get_image_files("utkface_aligned_cropped/UTKFace") files_valid = get_image_files("utkface_aligned_cropped/crop_part1")
代码运行时触发ImportError导入错误,完整错误栈如下:
ImportError Traceback (most recent call last) <ipython-input-4-07ceae9afcad> in <module>() 1 from fastai import * 2 from fastai.vision import * ----> 3 from fastai.layers import MSELossFlat, CrossEntropyFlat 4 from torchvision import transforms 5 import warnings ImportError: cannot import name 'MSELossFlat' from 'fastai.layers' (/usr/local/lib/python3.7/dist-packages/fastai/layers.py)
错误原因
Colab环境默认预装fastai v2版本,而该开源项目基于fastai v1版本开发,两个大版本的API路径、命名规则存在破坏性变更:
- fastai v1版本中,
MSELossFlat、CrossEntropyFlat两个损失类归属fastai.layers模块 - fastai v2版本中,所有损失类统一迁移至
fastai.losses模块,且CrossEntropyFlat更名为CrossEntropyLossFlat,原有导入路径直接失效。
解决方法
两种方案任选其一即可:
- 方案1:降级fastai至v1版本,完全适配原有项目代码
在Colab笔记本最顶部新增代码单元格,执行以下安装命令:
命令执行完成后重启Colab运行时,重新运行原有代码即可正常导入。!pip install fastai==1.0.61 - 方案2:保留预装的fastai v2版本,修改代码适配新API
- 将原导入语句
from fastai.layers import MSELossFlat, CrossEntropyFlat替换为:from fastai.losses import MSELossFlat, CrossEntropyLossFlat - 全局检索项目代码中所有调用
CrossEntropyFlat的位置,统一替换为CrossEntropyLossFlat即可正常运行。
- 将原导入语句
内容的提问来源于stack exchange,提问作者Kripa Ghosh
相关产品推荐
相关产品推荐

