PyTorchで変数とテンソルを使って要素ごとに乗算を実行するにはどうすればよいですか? 2つのテンソルでうまく動作します。変数とスカラーがうまく動作します。変数とテンソルで要素単位の乗算を実行しようとすると、しかし、私は得る:例えば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文を期待します同様の結果。最初の2回の乗算は期待どおりに動作し、3回目にエラーが発生します。私はPyTorchで*
のエイリアスを試みました(すなわち、x_variable.mul(y_tensor)
、torch.mul(y_tensor, x_variable)
など)。
テンソルと変数の間の要素ごとの乗算は、エラーとそれを生成するコードを考慮してサポートされていないようです。これは正しいです?それとも私は行方不明のものがありますか?ありがとうございました!
PyTorchのこの実装の背後にある理由を知っていますか?具体的には、なぜテンソルはスカラーのように扱われないのですか?どちらの場合も、グラディエントは必要ないことがわかっています。なぜ、乗算を直接許可しないのですか?いずれにせよ、答えに感謝! – golmschenk
ほとんどの操作はPyTorchに2回存在し、Tensorsに対して1回、Variablesに対して1回実装されています。変数の操作では、逆方向メソッドが必要です。したがって、微分不可能な演算は変数でサポートされていませんが、テンソルに適用できます。この理由から、これらの2つのスレッドを分離しておきたいと思っています。変数のスカラー演算は便宜上実装されているだけです。 – mexmex