PyTorch - 变量和张量之间的逐元素乘法?

PyTorch - Element-wise multiplication between a variable and a tensor?

从 PyTorch 0.4 开始,这个问题不再有效。在 0.4 Tensors 和 Variables 被合并。

如何在 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) 等)。

鉴于错误和产生它的代码,似乎不支持张量和变量之间的逐元素乘法。这个对吗?还是我缺少什么?谢谢!

是的,你是对的。仅 Tensor * TensorVariable * Variable 支持按元素乘法(与大多数其他运算一样),但 不支持 Tensor * Variable

要执行上面的乘法,请将 Tensor 包装为不需要梯度的 Variable。额外的开销是微不足道的。

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

但很明显,如果您确实需要通过图表进行自动微分,则只能使用 Variables。否则,您可以直接在 Tensors 上执行操作,就像您在问题中所做的那样。