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
прямо как вы сделали в своем вопросе.