簡體   English   中英

張量流中的張量收縮

[英]Tensor contraction in tensorflow

我有一個形狀為(?,4)的張量weights和一個形狀為(?,4,1024)的張量embeddings物。

我想通過根據對應的weights每一行embeddings中的4個張量的加權平均值來收縮張量,最終產生形狀為(?,1024)的張量output

我怎樣才能做到這一點? 我嘗試使用output = tf.tensordot(weights, embeddings, axes = [1,1])但是卻產生了形狀為(?,?,1024)的張量。

您可以這樣做:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM