使用ResNet50迁移学习时遇PyTorch权限错误求助
解决PyTorch预训练模型加载的PermissionError问题
你遇到的核心问题很明确:PyTorch默认会把预训练模型存到系统根目录的/.torch文件夹,但普通用户没有这个目录的写入权限,再加上你的环境里没装sudo命令,所以这条路走不通。下面给你几个简单可行的解决方案:
方案一:通过环境变量指定模型存储目录
这是最省心的方法,只需要在代码开头加几行,指定一个你有权限读写的目录(比如自己用户目录下的.torch文件夹,或者当前项目里新建的文件夹):
import os # 替换成你实际有权限的路径,比如/home/你的用户名/.torch,或者./torch_models(当前项目目录下) os.environ['TORCH_HOME'] = '/home/your_username/.torch' # 之后正常加载模型就行 import torchvision.models as models model = models.resnet50(pretrained=True)
设置好TORCH_HOME后,PyTorch就会自动把预训练模型下载到你指定的目录,再也不会去碰根目录了。
方案二:手动指定模型加载目录
如果你不想修改环境变量,也可以直接在加载权重时指定存储路径。因为models.resnet50(pretrained=True)内部会调用model_zoo.load_url,我们可以拆成手动加载的步骤:
import torchvision.models as models from torch.utils.model_zoo import load_url # 先初始化不带预训练权重的模型 model = models.resnet50(pretrained=False) # 指定你有权限的文件夹作为模型存储路径 state_dict = load_url( 'https://download.pytorch.org/models/resnet50-19c8e357.pth', model_dir='/path/to/your/available/folder' ) # 把权重加载到模型里 model.load_state_dict(state_dict)
为什么不建议用sudo?
你尝试用sudo但提示找不到命令,一方面是当前环境没装sudo工具;更重要的是,就算能用sudo,用root权限运行脚本会让下载的模型文件归root所有,后续你用普通用户运行时还是会有权限问题,而且root的Python依赖和你当前的conda环境大概率不一致,容易引发更多麻烦,所以完全没必要走这条路。
内容的提问来源于stack exchange,提问作者sigmoid
相关产品推荐
相关产品推荐

