【问题标题】:Tensor contraction in tensorflow张量流中的张量收缩
【发布时间】:2019-06-21 09:54:24
【问题描述】:

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

我想根据对应的weights对embeddings的每一行中的4个张量取一个加权平均值来收缩张量,最后产生一个形状为(?,1024)的张量output。

我该怎么做?我尝试使用output = tf.tensordot(weights, embeddings, axes = [1,1]),但它产生了一个形状为(?,?,1024) 的张量。

【问题讨论】:

  • 请问你最后用了什么?谢谢!
  • @LucaCappelletti 我使用了tf.einsum。查看代码示例in this repo(第 80 行)

标签: python tensorflow tensor


【解决方案1】:

你可以这样做:

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)

【讨论】:

    猜你喜欢
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 2017-11-05
    • 2018-12-13
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多