PyTorch - 变量和张量之间的逐元素乘法?
PyTorch - Element-wise multiplication between a variable and a tensor?
从 PyTorch 0.4 开始,这个问题不再有效。在 0.4 Tensor
s 和 Variable
s 被合并。
如何在 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 * 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
上执行操作,就像您在问题中所做的那样。
从 PyTorch 0.4 开始,这个问题不再有效。在 0.4 Tensor
s 和 Variable
s 被合并。
如何在 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 * 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
上执行操作,就像您在问题中所做的那样。