Python tensorflow中的广播点积

Python tensorflow中的广播点积,python,tensorflow,Python,Tensorflow,在tensorflow中,我有以下问题 我有一个形状为[batch_size,dim_a,dim_b]的张量m和一个形状为[batch_size,dim_b]的矩阵u M = tf.constant(shape=[batch_size, sequence_size, embed_dim]) U = tf.constant(shape=[batch_size, embed_dim]) 我要实现的是我的批次的每个索引的[I,dim_a,dim_b]x[I,dim_b]的点积 P[i] = tf.m

在tensorflow中,我有以下问题

我有一个形状为[batch_size,dim_a,dim_b]的张量m和一个形状为[batch_size,dim_b]的矩阵u

M = tf.constant(shape=[batch_size, sequence_size, embed_dim])
U = tf.constant(shape=[batch_size, embed_dim])
我要实现的是我的批次的每个索引的[I,dim_a,dim_b]x[I,dim_b]的点积

P[i] = tf.matmul(M[i, :, :], tf.expand_dims(U[i, :], 1)) for each i.

基本上,broadacast在批处理轴上绘制点积。这可能吗?我如何实现它?

这可以通过tf.einsum()实现:

输出:

M
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

U
[[2 3 3 3]
 [3 3 3 3]]

einsum result
[[ 18  62 106]
 [162 210 258]]

numpy, example 0
[ 18  62 106]

numpy, example 1
[162 210 258]

这可以通过tf.einsum()实现:

输出:

M
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

U
[[2 3 3 3]
 [3 3 3 3]]

einsum result
[[ 18  62 106]
 [162 210 258]]

numpy, example 0
[ 18  62 106]

numpy, example 1
[162 210 258]

由于每个向量都是一列矩阵,您可以对U进行重塑。Tensorflow在1.0版之前有
batch_matmul
,现在已与
matmul
合并。由于每个向量都是一列矩阵,您可以对U进行重塑。Tensorflow在1.0版之前有
batch_matmul
,现在已与
matmul
合并。