如何在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)
我希望第一個和最後一個print語句展示類似的結果。前兩次乘法運算符合預期,第三次出現錯誤。我試圖在PyTorch中使用*
的別名(即x_variable.mul(y_tensor)
,torch.mul(y_tensor, x_variable)
等)。
考慮到錯誤和產生它的代碼,似乎不支持張量和變量之間的元素相乘。它是否正確?還是有我失蹤的東西?謝謝!
你碰巧知道PyTorch中這個實現選擇背後的原因嗎?具體來說,爲什麼張量不是像標量一樣對待?在這兩種情況下,已知梯度不需要在它們上面,所以爲什麼不直接允許乘法?無論如何,謝謝你的回答! – golmschenk
大多數操作在PyTorch中存在兩次,它們對張量執行一次,對變量執行一次。變量上的操作需要一個反向方法。因此,變量不支持不可微分操作,但可以將它們應用於張量。我認爲他們想要保持這兩個線程分開出於這個原因。變量的標量操作只是爲了方便而實現的。 – mexmex