我有一个形状为weights
的张量(?,4)
和一个形状为embeddings
的张量(?,4,1024)
。
我想通过根据相应的embeddings
对weights
的每一行中的4个张量进行加权平均来收缩张量,最终产生形状为{的张量output
{1}}。
我该怎么做?我尝试使用(?,1024)
,但是却产生了形状为output = tf.tensordot(weights, embeddings, axes = [1,1])
的张量。
答案 0 :(得分:2)
您可以这样做:
import tensorflow as tf
weights = tf.placeholder(tf.float32, [None, 4])
embeddings = tf.placeholder(tf.float32, [None, 4, 1024])
output = tf.einsum('ij,ijk->ik', weights, embeddings)
您可以通过矩阵乘积表达相同的内容,不确定性能是否会有所不同:
output = tf.squeeze(tf.expand_dims(weights, 1) @ embeddings, 1)
您也可以乘以或减小,尽管原则上由于具有中间张量而使性能变差。
output = tf.reduce_sum(tf.expand_dims(weights, 2) * embeddings, axis=1)