张量流中的张量收缩

时间:2019-06-21 09:54:24

标签: python tensorflow tensor

我有一个形状为weights的张量(?,4)和一个形状为embeddings的张量(?,4,1024)

我想通过根据相应的embeddingsweights的每一行中的4个张量进行加权平均来收缩张量,最终产生形状为{的张量output {1}}。

我该怎么做?我尝试使用(?,1024),但是却产生了形状为output = tf.tensordot(weights, embeddings, axes = [1,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)