tensorflow 一個矩陣與多個矩陣相乘時的計算方法(二維和三維張量相乘為例)
阿新 • • 發佈:2019-01-31
當tensor1 的 shape 為[k, m, n], tensor2 的 shape 為 [n, p]時,
要將tensor1的後兩維構成的k個矩陣與tensor2中的矩陣做矩陣乘法得到 shape 為[k, m, p]的向量
解決辦法:
1,我們知道TensorFlow的matmul已經支援了batch,即:
A = tf.Variable(tf.random_normal(shape=(a, b, n, m)))
B = tf.Variable(tf.random_normal(shape=(a, b, m, k)))
tf.matmul(A, B)
會返回(a,b,n,k),前面的N個維度會被保留。但是適用情景與題目不符。
2. 我們可以先將用不到的維度通過reshape乘進去,然後有matmul得到結果之後再reshape回來,即
#A.shape() = (k,m,n), B.shape() = (n,p)
reshape_A = tf.reshape(A, [k*m,n])
re = tf.reshape( tf.matmul(reshape_A, B), [k, m, p])
對於形如[k, n, m] 和 [p, n] 的同理,將shape為[k,n,m]通過reshape變為[k*m,n]
如果不是矩陣乘法而是其他操作這種操作是否合理博主還沒有進行證明,希望高手能給予指點。