高版本torch.load的weights_only必须为True,如何改写上面的代码达到相同的效果同时满足版本要求
时间: 2024-10-25 15:08:52 浏览: 282
如果你需要使用高版本的PyTorch,并且`torch.load()`函数要求`weights_only=True`,那么你可以按照下面的方式修改原始代码:
```python
import torch
# 确保weights是以.pt结尾的文件路径
if weights.endswith('.pt') and os.path.isfile(weights):
# 使用weights_only=True加载权重数据,忽略非权重信息(如 WandB ID)
try:
weights_dict = torch.load(weights, map_location='cpu', map_location=torch.device('cpu'), weights_only=True)
wandb_id = weights_dict.get('wandb_id', None) # 仍然尝试从加载的数据中获取 wandb_id,但如果不在则返回 None
except Exception as e:
wandb_id = None
print(f"Failed to load wandb_id from weights due to {e}")
else:
wandb_id = None
# 上面的代码片段假设weights是正确的.pt文件路径
```
这里我们添加了`map_location`参数来指定加载位置,因为`weights_only=True`意味着只加载权重部分,不会自动处理元数据。同时,我们将异常处理放在尝试获取`wandb_id`的位置,以防止因无法访问而引发错误。如果`weights_only=True`对`torch.load()`有要求,则原始代码中的方法可能会因为包含额外信息而在新版本中失效。
阅读全文