张量流中的成对和

时间:2017-05-16 16:09:47

标签: python tensorflow deep-learning

我有两个张量AB,形状[10 5]。如何计算C形状[10 5 5]的张量C[x, i, j] = A[x, i] + B[x, j],以便{{1}}?

编辑:这是外部产品的总和,而不是外部产品本身。

3 个答案:

答案 0 :(得分:3)

比@ user1735003的答案稍微更具可读性和简洁性:

A[:, :, None] + B[:, None, :]

(实际上,另一个答案换了轴)

答案 1 :(得分:0)

目前我正在使用属性log(e^x * e^y) == x+y来完成matmul操作的添加:

op1 = tf.reshape(tf.exp(A), [10, -1, 1])
op2 = tf.reshape(tf.exp(B), [10, 1, -1])
C = tf.log(tf.matmul(op1, op2))

但我猜测会有更简单/更快的出路。

答案 2 :(得分:0)

你可以依靠broadcasting

op1 = tf.expand_dims(A, axis=2)
op2 = tf.expand_dims(B, axis=1)
C = tf.add(op1, op2)

请注意@MaxB的解决方案与此不相同,因为运算符[]相当于对strided_slice的调用,而不是expand_dims