当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]
如果不是矩阵乘法而是其他操作这种操作是否合理博主还没有进行证明,希望高手能给予指点。