PyTorch: новые и новые против - PullRequest
0 голосов
/ 18 октября 2018

В PyTorch какая разница между new_ones() против ones().Например,

x2.new_ones(3,2, dtype=torch.double)

против

torch.ones(3,2, dtype=torch.double)

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

new_ones ()

# defining the tensor along with device to run on. (Assuming CUDA hardware is available)

x = torch.rand(5, 3, device="cuda")

new_ones() работает с существующим тензором.y унаследует datatype от x и будет работать на том же device, как определено в x

y = x.new_ones(2, 2)
print(y)

Вывод:

tensor([[1., 1.],
        [1., 1.]], device='cuda:0')

ones ()

# defining tensor. By default it will run on CPU.
x = torch.ones(5, 3)
print(x)

Выход:

tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]])

ones() используется для определения тензора с 1. (как показано в примере) с заданным sizeи не зависит от существующего тензора, тогда как new_ones() работает с существующим тензором, который наследует свойства, такие как datatype и device от существующего тензора, и определяет tensor с заданным size.

0 голосов
/ 18 октября 2018

Ради этого ответа я предполагаю, что ваш x2 является ранее определенным torch.Tensor.Если затем мы перейдем к документации PyTorch , мы сможем прочитать следующее в new_ones():

Возвращает тензор размера size, заполненный 1. По умолчаниювозвращенный Тензор имеет те же torch.dtype и torch.device, что и этот тензор.

Тогда как ones()

Возвращает заполненный тензорсо скалярным значением 1, с формой, определяемой переменным размером аргумента.

Таким образом, по сути, new_ones позволяет быстро создать новый torch.Tensor на том же устройстве и типе данных, что и ранее существующий тензор (с единицами), тогда как ones() служит для создания torch.Tensor с нуля (заполненного единицами).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...