Pytorch 0.4.0 a introduit la fusion sur les classes Tensor et Variable.
Avant cette version, lorsque je voulais créer un Variable
avec autograd à partir d'un tableau numpy, je faisais ce qui suit (où x
est un tableau numpy):
x = Variable(torch.from_numpy(x).float(), requires_grad=True)
Avec PyTorch version 0.4.0, le guide de migration montre comment nous pouvons créer des tenseurs avec autograd activé, des exemples montrent que vous pouvez faire des choses telles que
x = torch.ones(3, 4, requires_grad=True)
et définissez également requires_grad
aux tenseurs existants
existing_tensor.requires_grad_()
J'ai essayé les trois choses suivantes pour essayer de créer un tenseur avec requires_grad=True
qui donne des erreurs (où x
est un tableau numpy):
Le premier est
x = FloatTensor(x, requires_grad=True)
ce qui donne l'erreur
TypeError: new() received an invalid combination of arguments - got
(numpy.ndarray, requires_grad=bool), but expected one of:
* (torch.device device)
* (Tuple of ints size, torch.device device)
didn't match because some of the keywords were incorrect:
requires_grad
* (torch.Storage storage)
* (Tensor other)
* (object data, torch.device device)
didn't match because some of the keywords were incorrect:
requires_grad
La seconde est de faire
x = FloatTensor(x)
x.requires_grad()
Et le troisième est
x = torch.from_numpy(x).single()
x.requires_grad()
Les deux lancent l'erreur suivante sur la deuxième ligne:
TypeError: 'bool' object is not callable
Ces erreurs me donnent peu d'indications sur ce que je fais mal, et puisque la dernière version est tellement nouvelle, il est difficile de trouver du contenu en ligne pour aider. Comment puis-je faire un FloatTensor
avec requires_grad=True
à partir d'un tableau numpy utilisant PyTorch 0.4.0, de préférence sur une seule ligne?
Comment puis-je faire un FloatTensor avec requires_grad = True à partir d'un tableau numpy en utilisant PyTorch 0.4.0, de préférence sur une seule ligne?
Si x
est votre tableau numpy, cette ligne devrait faire l'affaire:
torch.tensor(x, requires_grad=True)
Voici un exemple complet testé avec PyTorch 0.4.0:
import numpy as np
import torch
x = np.array([1.3, 0.5, 1.9, 2.45])
print('np.array:', x)
t = torch.tensor(x, requires_grad=True)
print('tensor:', t)
print('requires_grad:', t.requires_grad)
Cela donne la sortie suivante:
np.array: [1.3 0.5 1.9 2.45]
tensor: tensor([ 1.3000, 0.5000, 1.9000, 2.4500], dtype=torch.float64)
requires_grad: True
Edit: dtype
doit être déterminé par le dtype
donné de votre tableau numpy x
.
J'espère que ça aide.