web-dev-qa-db-ja.com

PyTorch 0.4.0を使用して、numpy配列からrequire_grad = TrueでFloatTensorを作成するにはどうすればよいですか?

Pytorch 0.4.0はTensorとVariableクラスのマージを導入しました。

このバージョンの前は、numpy配列からautogradを使用してVariableを作成したい場合、次のようにします(xはnumpy配列です)。

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

PyTorchバージョン0.4.0では、 移行ガイド は、autogradを有効にしてTensorを作成する方法を示しています。例では、次のようなことができます。

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

また、requires_gradを既存のテンソルに設定します

existing_tensor.requires_grad_()

エラーを発生させるrequires_grad=Trueを使用してTensorを作成するために、次の3つのことを試しました(xはnumpy配列です)。

最初は

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()

そして3つ目は

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

どちらも2行目に次のエラーをスローします。

TypeError: 'bool' object is not callable

これらのエラーは、私が間違っていることについてのヒントをほとんど与えません。最新バージョンは非常に新しいので、役立つコンテンツをオンラインで見つけるのは困難です。 PyTorch 0.4.0を使用して、できれば1行でnumpy配列からrequires_grad=Trueを使用してFloatTensorを作成するにはどうすればよいですか?

9
HBeel

PyTorch 0.4.0を使用して、派手な配列からrequires_grad = TrueでFloatTensorを作成するにはどうすればよいですか?

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は、numpy配列の指定されたdtypeによって決定される必要がありますx

これがお役に立てば幸いです。

10
blue-phoenox