【问题标题】:Volatile was removed and now has no effect. Use `with torch.no_grad():` instead挥发性物质已被移除,现在没有效果。改用`with torch.no_grad():`
【发布时间】:2021-01-02 21:39:49
【问题描述】:
我尝试使用带有 COCO 数据集的 Show And Tell 模型。但是,在某一时刻,我的 Torch 计划暂停了。谁能修复我的代码?这是我的代码导致训练暂停。
def to_var(x, volatile=True):
if torch.cuda.is_available():
x = x.cuda()
return Variable(x, volatile=volatile)
警告如下。
utils.py:114: UserWarning: volatile 已被删除,现在无效。与 torch.no_grad(): 一起使用。返回变量(x, volatile=volatile)
【问题讨论】:
标签:
deep-learning
pytorch
torchvision
mscoco
【解决方案1】:
在新版本的 Pytorch 中,volatile 被删除,Variable 也不再需要。
volatile=True 的任何张量计算都不会被 autograd 跟踪。
所以你的函数可以重写为:
import torch
def to_var(x, volatile=True):
if torch.cuda.is_available():
x = x.cuda()
x.requires_grad = not volatile
return x
x = torch.tensor(1.0)
print(x.requires_grad)
x = to_var(x, volatile=True)
print(x.requires_grad)
x = to_var(x, volatile=False)
print(x.requires_grad)
输出:
>>> False
>>> False
>>> True