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)
我有以下两个张量:
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)