Python tensorflow中的广播点积
在tensorflow中,我有以下问题 我有一个形状为[batch_size,dim_a,dim_b]的张量m和一个形状为[batch_size,dim_b]的矩阵uPython 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
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
合并。