Новичок Pytorch: тензор.новый метод

все, у меня есть маленький вопрос.

Какова цель метода tensor.new(..) в Pytorch, я ничего не нашел в документации. Похоже, что он создает новый тензор (как и предполагает название), но почему мы не просто используем конструкторы torch.Tensor вместо использования этого нового метода, который требует существующего тензора.

Заранее спасибо.

Ответ 1

Как говорится в документации tenor.new():

Создает новый тензор того же типа, что и self тензор.

Также обратите внимание:

Для тензоров CUDA этот метод создаст новый тензор на том же устройстве, что и этот тензор.

Ответ 2

Кажется, что в более новых версиях 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])

Ответ 3

Вот простой пример использования и пример использования new(), поскольку без этого полезность этой функции не очень понятна.

Предположим, что вы хотите добавить гауссовский шум в тензор (или переменную), не зная априори, что это за тип данных.

Это создаст тензор гауссова шума, такой же формы и типа данных, как у переменной X:

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

Этот пример также иллюстрирует использование new(size), так что мы получаем тензор того же типа и того же размера, что и X.

Ответ 4

Я нашел ответ. Он используется для создания нового тензора того же типа.