PyTorch 0.4以降、この質問は無効になりました。0.4ではTensor
sとVariable
sが統合されました。
PyTorchで変数とテンソルを使用して要素ごとの乗算を実行するにはどうすればよいですか? 2つのテンソルでうまく動作します。変数とスカラーを使用すると正常に動作します。しかし、変数とテンソルで要素ごとの乗算を実行しようとすると、次のようになります。
_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)
_
最初と最後の印刷ステートメントが同様の結果を示すことを期待します。最初の2つの乗算は期待どおりに機能し、3番目のエラーが発生します。 PyTorchで_*
_のエイリアス(つまり、x_variable.mul(y_tensor)
、torch.mul(y_tensor, x_variable)
など)を試しました。
エラーとそれを生成するコードを考えると、テンソルと変数の間の要素ごとの乗算はサポートされていないようです。これは正しいです?それとも私が見逃しているものはありますか?ありがとうございました!
はい。それで合っています。要素ごとの乗算(他のほとんどの演算と同様)は、_Tensor * Tensor
_または_Variable * Variable
_でのみサポートされていますが、_Tensor * Variable
_ではnotです。
上記の乗算を実行するには、Tensor
を、勾配を必要としないVariable
としてラップします。追加のオーバーヘッドはわずかです。
_y_variable = torch.autograd.Variable(y_tensor, requires_grad=False)
x_variable * y_variable # returns Variable
_
しかし、明らかに、実際にグラフによる自動微分が必要な場合は、Variables
のみを使用してください。それ以外の場合は、質問で行ったように、Tensors
に対して直接操作を実行できます。