torch.autograd.Variable的目的是什么?

时间:2019-08-20 19:14:05

标签: python deep-learning pytorch

我从训练数据集中加载了featureslabels。它们最初都是numpy数组,但是我使用torch.from _numpy(features.copy())torch.tensor(labels.astype(np.bool))将它们更改为割炬张量。

我注意到torch.autograd.Variableplaceholder中的tensorflow类似。

训练网络时,我首先尝试了

features = features.cuda()
labels = labels.cuda()

outputs = Config.MODEL(features)
loss = Config.LOSS(outputs, labels)

然后我尝试了

features = features.cuda()
labels = labels.cuda()

input_var = Variable(features)
target_var = Variable(labels)
outputs = Config.MODEL(input_var)
loss = Config.LOSS(outputs, target_var)

两个障碍都成功地激活了训练,但我担心可能会有微不足道的差异。

1 个答案:

答案 0 :(得分:2)

根据this question,您不再需要使用Pytorch Autograd的变量。

  

Autograd自动将requires_grad设置为True的张量。

更重要的是

  

Variable(tensor)Variable(tensor, requires_grad)仍能按预期工作,但是它们返回张量而不是变量。

这意味着,如果您的featureslabels已经是张量(在您的示例中似乎是张量),那么您的Variable(features)Variable(labels)只会再次返回张量

变量的最初目的是能够使用自动区分(Source):

  

变量只是张量的包装器,因此您现在可以轻松地自动计算梯度。