我从训练数据集中加载了features
和labels
。它们最初都是numpy数组,但是我使用torch.from _numpy(features.copy())
和torch.tensor(labels.astype(np.bool))
将它们更改为割炬张量。
我注意到torch.autograd.Variable
与placeholder
中的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)
两个障碍都成功地激活了训练,但我担心可能会有微不足道的差异。
答案 0 :(得分:2)
根据this question,您不再需要使用Pytorch Autograd的变量。
Autograd自动将
requires_grad
设置为True
的张量。
更重要的是
Variable(tensor)
和Variable(tensor, requires_grad)
仍能按预期工作,但是它们返回张量而不是变量。
这意味着,如果您的features
和labels
已经是张量(在您的示例中似乎是张量),那么您的Variable(features)
和Variable(labels)
只会再次返回张量
变量的最初目的是能够使用自动区分(Source):
变量只是张量的包装器,因此您现在可以轻松地自动计算梯度。