TensorFlow 批量外积

TensorFlow Batch Outer Product

我有以下两个张量:

x, with shape [U, N]
y, with shape [N, V]

我想执行批量外积:我想将 x 第一列中的每个元素乘以 y 第一行中的每个元素以获得张量形状 [U, V],然后 x 的第二列到 y 的第二行,依此类推。最终张量的形状应为 [N, U, V],其中 N 是批量大小。

有什么简单的方法可以在 TensorFlow 中实现这一点?我尝试使用 batch_matmul() 但没有成功。

使用 tf.batch_matmul() 以下是否可行?

print x.get_shape()  # ==> [U, N]
print y.get_shape()  # ==> [N, V]

x_transposed = tf.transpose(x)
print x_transposed.get_shape()  # ==> [N, U]

x_transposed_as_matrix_batch = tf.expand_dims(x_transposed, 2)
print x_transposed_as_matrix_batch.get_shape()  # ==> [N, U, 1]

y_as_matrix_batch = tf.expand_dims(y, 1)
print y_as_matrix_batch.get_shape()  # ==> [N, 1, V]

result = tf.batch_matmul(x_transposed_as_matrix_batch, y_as_matrix_batch)
print result.get_shape()  # ==> [N, U, V]

也许,使用tf.einsum有一个更优雅的解决方案:

result = tf.einsum("un,nv->nuv", x, y)