2017-10-05 3 views
1

これは基本的な質問のように思えるかもしれませんが、私はそれを解決することができません。バッチ内のすべてのサンプルにPyTorchのtorch.inverse()関数を適用する方法は?

私のニューラルネットワークのフォワードパスでは、8×3×3の出力テンソルがあり、8はバッチサイズです。我々は3x3テンソルの各々を非特異行列と仮定することができる。私はこれらの行列の逆行列を見つける必要があります。 PyTorch inverse()関数は、正方行列でのみ機能します。今は8x3x3なので、バッチ内のすべての行列にこの関数を微分可能に適用するにはどうすればよいですか?

サンプルを繰り返して逆行列をPythonリストに追加すると、逆テンソルに変換されますが、これはバックプロップ時に問題になるはずですか? (私はいくつかの演算を実行するためにPyTorchのテンソルをnumpyに変換してからテンソルに戻って、そのような演算のバックプロップの間に勾配を計算しないので尋ねています)。

a = torch.arange(0,8).view(-1,2,2) 
b = [m.inverse() for m in a] 
c = torch.FloatTensor(b) 

TypeError: 'torch.FloatTensor' object does not support indexing

答えて

1

あなたは、torch.functional.unbind()を使ってテンソルを分割した結果のすべての要素に逆を適用し、バックスタックできます

a = torch.arange(0,8).view(-1,2,2) 
b = [t.inverse() for t in torch.functional.unbind(a)] 
c = torch.functional.stack(b) 
+0

これは非常に非常に遅いようです! – Curious

関連する問題