【问题标题】:Is there any way I can download the pre-trained models available in PyTorch to a specific path?有什么方法可以将 PyTorch 中可用的预训练模型下载到特定路径?
【发布时间】:2019-03-08 18:09:45
【问题描述】:

【问题讨论】:

    标签: python deep-learning pytorch pre-trained-model torchvision


    【解决方案1】:

    正如在他的answer 中提到的@dennlinger :torch.utils.model_zoo,在您加载预训练模型时被内部调用。

    更具体地说,每次加载预训练模型时都会调用方法:torch.utils.model_zoo.load_url()。相同的文档提到:

    model_dir 的默认值为$TORCH_HOME/models,其中 $TORCH_HOME 默认为 ~/.torch。

    可以使用$TORCH_HOME 覆盖默认目录 环境变量。

    这可以按如下方式完成:

    import torch 
    import torchvision
    import os
    
    # Suppose you are trying to load pre-trained resnet model in directory- models\resnet
    
    os.environ['TORCH_HOME'] = 'models\\resnet' #setting the environment variable
    resnet = torchvision.models.resnet18(pretrained=True)
    

    我在 PyTorch 的 GitHub 存储库中提出问题时遇到了上述解决方案: https://github.com/pytorch/vision/issues/616

    这导致了文档的改进,即上述解决方案。

    【讨论】:

    • 对我来说它在 ~/.cache/torch 中,没有明确设置它
    【解决方案2】:

    是的,您可以简单地复制网址并使用wget 将其下载到所需的路径。这是一个插图:

    对于 AlexNet:

    $ wget -c https://download.pytorch.org/models/alexnet-owt-4df8aa71.pth
    

    对于 Google Inception (v3):

    $ wget -c https://download.pytorch.org/models/inception_v3_google-1a9a5a14.pth
    

    对于 SqueezeNet:

    $ wget -c https://download.pytorch.org/models/squeezenet1_1-f364aa15.pth
    

    对于 MobileNetV2:

    $ wget -c https://download.pytorch.org/models/mobilenet_v2-b0353104.pth
    

    对于DenseNet201:

    $ wget -c https://download.pytorch.org/models/densenet201-c1103571.pth
    

    对于 MNASNet1_0:

    $ wget -c https://download.pytorch.org/models/mnasnet1.0_top1_73.512-f206786ef8.pth
    

    对于 ShuffleNetv2_x1.0:

    $ wget -c https://download.pytorch.org/models/shufflenetv2_x1-5666bf0f80.pth
    

    如果你想在 Python 中做,那么使用类似的东西:

    In [11]: from six.moves import urllib
    
    # resnet 101 host url
    In [12]: url = "https://download.pytorch.org/models/resnet101-5d3b4d8f.pth"
    
    # download and rename the file to `resnet_101.pth`
    In [13]: urllib.request.urlretrieve(url, "resnet_101.pth")
    Out[13]: ('resnet_101.pth', <http.client.HTTPMessage at 0x7f7fd7f53438>)
    

    P.S:你可以在torchvision.models的各个python模块中找到下载地址

    【讨论】:

      【解决方案3】:

      TL;DR:不,不能直接使用,但您可以轻松适应它。

      我想你要做的是查看torch.utils.model_zoo,它是在加载预训练模型时在内部调用的:

      如果我们查看预训练模型的代码,例如 AlexNet here,我们可以看到它只是调用了前面提到的 model_zoo 函数,但没有保存位置。您可以修改 PyTorch 源以指定它(这实际上是 IMO 的一个很好的补充,因此可能会为此打开一个拉取请求),或者只需根据自己的喜好采用第二个链接中的代码(并将其保存到使用不同名称的自定义位置),然后在此处手动插入相关位置。

      如果您想定期更新 PyTorch,我强烈推荐第二种方法,因为它不涉及直接更改 PyTorch 的代码库,并且在更新期间可能会抛出错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-05
        • 2020-02-07
        • 2019-07-17
        • 2019-09-11
        • 1970-01-01
        • 2021-07-16
        • 2022-08-10
        相关资源
        最近更新 更多