我有两个张量,
x = shape(batchsize, 29, 64),
y = shape(batchsize, 29, 29, 64)
我想在y上逐行迭代,用x执行元素乘法,sum_reduce结果,并将这些结果堆叠到新的张量。 结果应该是一个形状(batchsize,29,64)。 它与卷积非常相似。
我将如何顺序编程:
for batchnr in range(x.shape[0]):
for n in range(y.shape[1]):
temp = tf.multiply(x[batchnr][n], y[batchnr]) #shape(29,64)
prod = tf.reduce_sum(temp) # shape(1,64)
res[batchnr][n] = prod
我已经创建了这个解释图:由于reduce_sum是针对每一行完成的,因此结果是一个形状的张量(batchsize,29,64)。
我无法弄清楚如何正确而有效地做到这一点。谢谢。
答案 0 :(得分:1)
我想我已经找到了解决方案。而不是迭代y:
在代码中看起来像:
m = K.tf.constant([1, 29, 1], dtype=K.tf.int32)
x = K.tf.tile(Z_RBF[0], m) #vermehrfache Z und stacke es zu RBF shape
x = K.tf.reshape(x, shape=(-1, *Z_RBF[1].shape[1:]))
x = K.tf.multiply(x, Z_RBF[1])
x = K.tf.reduce_sum(x, axis=2) # shape (batchsize, 29, 64)
。