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

Pytorch 0.4.0 представил слияние классов Tensor и Variable.

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

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

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

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

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

existing_tensor.requires_grad_()

Я попробовал следующие три вещи, чтобы попытаться создать Тензор с 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, предпочтительно в одну строку?

7 голосов | спросил HBeel 29 PMpSun, 29 Apr 2018 16:45:30 +030045Sunday 2018, 16:45:30

1 ответ


0

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

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

 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.

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

ответил blue-phoenox 29 PMpSun, 29 Apr 2018 23:08:18 +030008Sunday 2018, 23:08:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132