Ответ 1
Как говорится в документации tenor.new():
Создает новый тензор того же типа, что и self тензор.
Также обратите внимание:
Для тензоров CUDA этот метод создаст новый тензор на том же устройстве, что и этот тензор.
все, у меня есть маленький вопрос.
Какова цель метода tensor.new(..)
в Pytorch, я ничего не нашел в документации. Похоже, что он создает новый тензор (как и предполагает название), но почему мы не просто используем конструкторы torch.Tensor
вместо использования этого нового метода, который требует существующего тензора.
Заранее спасибо.
Как говорится в документации tenor.new():
Создает новый тензор того же типа, что и self тензор.
Также обратите внимание:
Для тензоров CUDA этот метод создаст новый тензор на том же устройстве, что и этот тензор.
Кажется, что в более новых версиях 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])
Вот простой пример использования и пример использования new()
, поскольку без этого полезность этой функции не очень понятна.
Предположим, что вы хотите добавить гауссовский шум в тензор (или переменную), не зная априори, что это за тип данных.
Это создаст тензор гауссова шума, такой же формы и типа данных, как у переменной X
:
noise_like_grad = X.data.new(X.size()).normal_(0,0.01)
Этот пример также иллюстрирует использование new(size)
, так что мы получаем тензор того же типа и того же размера, что и X
.
Я нашел ответ. Он используется для создания нового тензора того же типа.