Как я могу сделать FloatTensor с require_grad = True из массива с использованием PyTorch 0.4.0? - PullRequest
0 голосов
/ 29 апреля 2018

Pytorch 0.4.0 ввел слияние классов Tensor и Variable.

До этой версии, когда я хотел создать Variable с autograd из массива numpy, я делал бы следующее (где x - массив numpy):

x = Variable(torch.from_numpy(x).float(), requires_grad=True)

В PyTorch версии 0.4.0, руководство по миграции показывает, как мы можем создавать Tensors с включенным автоматическим обновлением, примеры показывают, что вы можете делать такие вещи, как

x = torch.ones(3, 4, requires_grad=True) 

, а также установить requires_grad для существующих тензоров

existing_tensor.requires_grad_()

Я попробовал следующие три вещи, чтобы попытаться создать Tensor с requires_grad=True, который выдает ошибки (где x - это пустой массив):

Первый

x = FloatTensor(x, requires_grad=True)

что дает ошибку

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

Второй должен сделать

x = FloatTensor(x)
x.requires_grad()

И третий

x = torch.from_numpy(x).single()
x.requires_grad()

Которые оба выдают следующую ошибку во второй строке:

TypeError: 'bool' object is not callable

Эти ошибки дают мне небольшую подсказку о том, что я делаю неправильно, и, поскольку последняя версия настолько нова, трудно найти содержание в Интернете, чтобы помочь. Как я могу сделать FloatTensor с requires_grad=True из массива с использованием PyTorch 0.4.0, предпочтительно в одной строке?

1 Ответ

0 голосов
/ 29 апреля 2018

Как я могу создать FloatTensor с require_grad = True из массива с использованием PyTorch 0.4.0, предпочтительно в одной строке?

Если x - это ваш массив с numpy, то эта строка должна помочь:

torch.tensor(x, requires_grad=True)

Вот полный пример, протестированный с 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)

Это дает следующий вывод:

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

Редактировать: dtype должен определяться заданным dtype вашего массива x.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...