web-dev-qa-db-fra.com

Comment puis-je faire un FloatTensor avec requires_grad = True à partir d'un tableau numpy en utilisant PyTorch 0.4.0?

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?

9
HBeel

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.

10
blue-phoenox