No module named ‘torchvision.models.utils‘

目录

  • – 问题描述
  • – 原因探寻
  • – 解决方法
  • – 方法一
  • – 方法二
  • – 方法三
  • – 问题描述

    笔者在使用 pytorch=1.10.0, torchvision=0.11.1 的环境运行代码时,运行到语句 from torchvision.models.utils import load_state_dict_from_url 时会出现以下报错:

    
    >>> from torchvision.models.utils import load_state_dict_from_url
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ModuleNotFoundError: No module named 'torchvision.models.utils'
    

    而该语句在 pytorch=1.2.0, torchvision=0.4.0 以及 pytorch=1.6.0, torchvision=0.7.0 下均能运行。

    – 原因探寻

    相关博客1指出:

    报错原因是torchvision的版本0.2太低,安装个0.4的就可以的

    因此,安装相应版本的 torchvision 确实可以解决这个问题,并且这个语法在低版本和最新的版本中都不支持了。

    参考对不同版本的 torchvision.models 的源码解析,可以看出新旧版本在导入预训练模型时代码的区别。

    新版本为:PyTorch源码解读之torchvision.models

    稍旧版本为:PyTorch 75. PyTorch实现ResNet的代码解读

    – 解决方法

    – 方法一

    安装相应的 torchvision 版本,目前实测 0.4.0~0.7.0 的版本均支持此类语句。

    – 方法二

    更改导入预训练模型的语句,可以借鉴ResNet源码的导入方式2,使用

    import torch.utils.model_zoo as model_zoo
    
    model.load_state_dict(model_zoo.load_url(model_urls['resnet18']))
    

    方式导入预训练模型。

    – 方法三

    通过查阅 torchvision 的代码仓库【1】,还有另一种解决方法34

    The original code “from .utils import load_state_dict_from_url” is not applicable.
    you connot import load_state_dict_from_url from .utils.
    change “.utils” to “torch.hub” can fix the problem.

    即将 from torchvision.models.utils import load_state_dict_from_url 改为 from torch.hub import load_state_dict_from_url
    注意,此语法只针对较高版本的pytorch。


    1. No module named ‘torchvision.models._utils‘ ↩︎

    2. PyTorch源码解读之torchvision.models ↩︎

    3. Update resnet.py ↩︎

    4. Bug report: changing .utils to .hub ↩︎

    来源:yyywxk

    物联沃分享整理
    物联沃-IOTWORD物联网 » No module named ‘torchvision.models.utils‘

    发表评论