PyTorch-поэлементное умножение между переменной и тензором?

как я могу выполнить поэлементное умножение с переменной и тензором в PyTorch? С двумя тензорами работает нормально. С переменной и скаляром работает отлично. Но при попытке выполнить поэлементное умножение с переменной и тензором я получаю:

XXXXXXXXXXX in mul
    assert not torch.is_tensor(other)
AssertionError

например, при выполнении следующего:

import torch

x_tensor = torch.Tensor([[1, 2], [3, 4]])
y_tensor = torch.Tensor([[5, 6], [7, 8]])

x_variable = torch.autograd.Variable(x_tensor)

print(x_tensor * y_tensor)
print(x_variable * 2)
print(x_variable * y_tensor)

Я ожидал бы, что первый и последний операторы печати покажут аналогичные результаты. Первые два умножения работают, как и ожидалось, с ошибкой поднимаемся в третьем. Я попытался использовать псевдонимы * в PyTorch (т. е. x_variable.mul(y_tensor), torch.mul(y_tensor, x_variable), etc.).

кажется, что элементарное умножение между тензором и переменной не поддерживается с учетом ошибки и кода, который ее создает. Правильно ли это? Или я что-то упускаю? Спасибо!

1 ответов


Да, вы правы. Элементарное умножение (как и большинство других операций) поддерживается только для Tensor * Tensor или Variable * Variable, а не на Tensor * Variable.

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

y_variable = torch.autograd.Variable(y_tensor, requires_grad=False)
x_variable * y_variable # returns Variable

но, очевидно, только использовать Variables хотя, если вам действительно требуется автоматическое дифференцирование через график. Остальное вы можете просто выполнить операция на Tensors прямо как вы сделали в своем вопросе.