挥发性被删除,现在没有效果使用 with.torch.no_grad() instread

2 pytorch

我的火炬程序此时停止了,我想我不能使用 volatile=True
我应该如何更改它以及停止的原因是什么?
以及我应该如何更改此代码?

images = Variable(images.cuda())
targets = [Variable(ann.cuda(), volatile=True) for ann in targets]
Run Code Online (Sandbox Code Playgroud)

train.py:166:用户警告:易失性已被删除,现在没有效果。with torch.no_grad():代替使用。

jod*_*dag 5

Variable不执行任何操作,自 pytorch 0.4.0 起已被弃用。它的功能已与类合并torch.Tensor。当时,该volatile标志用于禁用 volatile 变量参与的任何操作的计算图的构造。较新的 pytorch 已更改此行为,改为用于with torch.no_grad():禁用语句正文中任何内容的计算图的构造with

您应该更改什么首先取决于您使用 volatile 的原因。不管怎样,尽管你可能想使用

images = images.cuda()
targets = [ann.cuda() for ann in targets]
Run Code Online (Sandbox Code Playgroud)

在训练期间,您将使用类似以下内容的内容来创建计算图(假设模型、标准和优化器的标准变量名称)。

output = model(images)
loss = criterion(images, targets)
optimizer.zero_grad()
loss.backward()
optimizer.step()
Run Code Online (Sandbox Code Playgroud)

由于您不需要在评估期间执行反向传播,因此您可以使用with torch.no_grad():禁用计算图的创建来减少内存占用并加快计算速度。

with torch.no_grad():
    output = model(images)
    loss = criterion(images, targets)
Run Code Online (Sandbox Code Playgroud)