You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fastai构建目标检测模型运行教程时出现smooth_l1_loss报错如何解决

问题原因

这个报错是新旧版本依赖不兼容导致的:

  • 你使用的教程适配的是fastai v2早期版本 + PyTorch 1.7/1.8的运行环境,而当前Google Colab默认预装的是更高版本的PyTorch(1.10+)和fastai
  • PyTorch 1.10版本之后调整了torch_function的分发规则,fastai自定义的TensorImage、TensorBBox张量类型没有适配新版本的smooth_l1_loss实现,PyTorch找不到对应类型的损失计算逻辑就会抛出这个错误。
解决方案

你可以根据自己的需求选择以下任意一种方法修复:

  • 方法1:自定义损失函数做类型转换
    在损失计算前显式把fastai自定义张量转成普通PyTorch张量,不需要改动其他逻辑,示例代码如下:

    import torch
    import torch.nn.functional as F
    
    def adapted_smooth_l1_loss(input, target, *args, **kwargs):
        # 转换为普通Tensor即可适配PyTorch原生损失函数
        input = input.as_subclass(torch.Tensor)
        target = target.as_subclass(torch.Tensor)
        return F.smooth_l1_loss(input, target, *args, **kwargs)
    

    后续把教程代码中调用smooth_l1_loss的位置替换成上面的adapted_smooth_l1_loss即可。

  • 方法2:固定兼容的依赖版本(无需修改原教程代码,最省事)
    在Colab notebook的最开头先运行以下代码安装对应版本的依赖,安装完成后按照提示重启运行时,再运行后续教程代码就不会出现该错误:

    !pip install fastai==2.5.3 torch==1.9.0 torchvision==0.10.0 -q
    
  • 方法3:修改数据集的输出类型
    在构建数据块的标签转换逻辑中,去掉TensorBBox的类型封装,直接返回普通张量格式的边界框标注,PyTorch就能直接识别并计算损失。

内容的提问来源于stack exchange,提问作者Marina Qian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:39:03