0

我有一个两个矩阵 F(shape = (4000, 64)) 和 M(shape=(4000,9)) 并且希望得到 shape = (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) [如 MATLAB 中的 repmat] 并按元素相乘。你还能有其他想法吗?

4

2 回答 2

2

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

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)
于 2017-07-08T07:43:33.320 回答
1

你可以使用

tf.reshape(M[:,tf.newaxis,:] * F[...,tf.newaxis], [4000,-1])
于 2017-07-08T08:45:17.910 回答