web-dev-qa-db-ja.com

Pytorch初心者:tensor.newメソッド

皆さん、ちょっと質問があります。

Pytorchのメソッドtensor.new(..)の目的は何ですか、ドキュメントには何も見つかりませんでした。 (名前が示すように)新しいTensorを作成するように見えますが、既存のテンソルを必要とするこの新しいメソッドを使用する代わりに、torch.Tensorコンストラクターを使用しないのはなぜですか。

前もって感謝します。

13
abcdaire

tensor.new() のドキュメントが言うように:

selfテンソルと同じデータ型のnewテンソルを構築します。

また注意してください:

CUDAテンソルの場合、このメソッドはこのテンソルと同じデバイス上にnewテンソルを作成します。

13
Wasi Ahmad

これがないと、この関数のユーティリティはあまり明確ではないため、new()を使用した簡単な使用例と例を次に示します。

データ型が何であるかをアプリオリに知らずに、ガウスノイズをテンソル(または変数)に追加するとします。

これにより、変数Xと同じ形状およびデータ型のガウスノイズのテンソルが作成されます。

_ noise_like_grad = X.data.new(X.size()).normal_(0,0.01)
_

この例はnew(size)の使用法も示しているため、Xと同じタイプで同じサイズのテンソルを取得できます。

2
AruniRC

PyTorchの新しいバージョンでは、この「レガシー」newメソッドを置き換えることを目的としたさまざまな_new_*_メソッドがたくさんあるようです。

したがって、テンソルt = torch.randn((3, 4))がある場合は、目的に応じて、これらのメソッドのいずれかを使用して、同じタイプとデバイスで新しいテンソルを構築できます。

_t = torch.randn((3, 4))
a = t.new_tensor([1, 2, 3])  # same type, device, new data
b = t.new_empty((3, 4))      # same type, device, non-initialized
c = t.new_zeros((2, 3))      # same type, device, filled with zeros
... 
_
_for x in (t, a, b, c):
    print(x.type(), x.device, x.size())
# torch.FloatTensor cpu torch.Size([3, 4])
# torch.FloatTensor cpu torch.Size([3])
# torch.FloatTensor cpu torch.Size([3, 4])
# torch.FloatTensor cpu torch.Size([2, 3])
_
2
devforfu

答えを見つけました。同じタイプの新しいテンソルを作成するために使用されます。

1
abcdaire