tensorflow 两个矩阵逐元素相乘在轴 = 0, (M,k) * (M,l) --> (M,k*l)

tensorflow two matrix elementwise multiply in axis = 0, (M,k) * (M,l) --> (M,k*l)

我有两个矩阵,F(shape = (4000, 64)) 和 M(shape=(4000,9)) 并希望得到形状 = (4000,64*9)

的结果

我可以用下面的代码来考虑for循环(理想)

result = np.zeros(4000,64*9)
ind = 0
for i in range(64):
    for j in range(9):
        result[:,ind]= tf.muliply(F[:,i]),M[:,j])
        ind += 1

但我知道 tensorflow 不支持 For Loop

是否有与上述代码执行相同功能的函数?


编辑)

我想出了一个主意。 F,M 重复形状 (4000,64*9) [liek repmat in MATLAB] 并按元素相乘。 您还有其他想法吗?

如果您将输入重塑为 F(shape = (4000, 64, 1))M(shape=(4000,1, 9)),则可以使用 tf.matmul。举个例子,

F = tf.Variable(tf.random_uniform(shape=(4000, 64, 1)))
M = tf.Variable(tf.random_uniform(shape=(4000, 1, 9)))
C = tf.matmul(F, M)
C = tf.reshape(C, (4000, -1))
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
print(C.eval().shape)

#Output: (4000, 576)

你可以使用

tf.reshape(M[:,tf.newaxis,:] * F[...,tf.newaxis], [4000,-1])