一定的乘法我有尺寸[a,b,c,d]
的一個張量A
和尺寸[b,b,d,e]
的另一B
和C
的[a]
整數從0到b
列表。我需要製作尺寸[a,b,c,e]
的張量D
通過如何實現在tensorflow
D[i,j,k,l] = sum for m=0..d of A[i,C[i],k,m] * B[C[i],j,m,l]
b
給予足夠小(3或5,通常是?)我不介意在b
獨立的操作做這一點 - 但我不能如果要花費b^2
的記憶或時間,當這種操作在b
中顯然應該是線性的時候,不能承擔浪費。這似乎是點式乘法(包括廣播?)和張量收縮(矩陣乘以公共m
維度)的一些組合,但我不能把它縮小。
如果有人能真正說服我,在tensorflow提供的操作中O(b)
flops是不可能的,那麼沒關係,但是我肯定想要一個O(b^2)
。
更新:它看起來像適當修改A
張量可以使用tf.gather_nd
單獨構建;如果這可以與B
以某種方式配對,也許?不幸的是,我迄今爲止的實驗導致在tf.gather_nd
本身發現了一個錯誤,這已經減慢了速度。