2016-12-04 5 views

答えて

1

最初のステップは、最初の次元だけが保存されるようにテンソルを転置して変形することです。その場合には、それは非常に簡単です、あなただけの最初の2次元結合する必要があります。

:次に

x = tensor.tensor3() 
y = tensor.tensor4() 
i, j, m, k = y.shape 

x_ = x.reshape((i * j, k)) 
y_ = y.reshape((i * j, m, k)) 

を、あなたはy_の軸2とx_の1軸合計しようとしているbatched_tensordotに指定します

z_ = tensor.batched_tensordot(x_, y_, (1, 2)) # shape (i * j, m) 

最後に、最初の2次元を取得するためにz_を再構築:

z = z_.reshape((i, j, m)) 
print(z.eval({x: np.zeros((3, 4, 5)), y: np.zeros((3, 4, 7, 5))}).shape) 
# (3, 4, 7) 
+0

パスカルLamblin @どうもありがとうございました。あなたは私の問題を解決しました。しかし、私はtensor.batched_tensordot(x、y、(2、3))を試した理由と、(i、j、i、j 、m) –

+0

batched_tensordotを使用すると、最初の軸は保存され(共同で反復されるため)、最初の図形はiになります。次に、kは除去される(それは合計されるため)。残りの次元は、xについてはj、連結されるyについては(j、m)である。 最後に、形状は(i、)+(j、)+(j、m)または(i、j、j、m)です。テンソル(x、y、(2,3))(バッチなし)はあなたに(i、j、i、j、m) –

関連する問題