Tensorflow:迭代逐行,逐元素乘法,减少和。自定义卷积

时间:2018-01-02 21:04:09

标签: python tensorflow deep-learning matrix-multiplication convolution

我有两个张量,

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)。

enter image description here

我无法弄清楚如何正确而有效地做到这一点。谢谢。

1 个答案:

答案 0 :(得分:1)

我想我已经找到了解决方案。而不是迭代y:

  • 将x放大为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)