使用 Tensorflow 进行三重张量积

bec*_*cko 0 linear-algebra tensorflow tensorflow2.0

假设我有一个矩阵A和两个x,y适当维度的向量。我想计算点积x' * A * y,其中x'表示转置。这应该会产生一个标量。

Tensorflow中有方便的API函数来做到这一点吗?

(请注意,我使用的是 Tensorflow 2)。

Tan*_*moy 5

使用 tf.linalg.tensordot()查看文档

正如您在问题中提到的,您正在尝试找到点积。在这种情况下tf.matmul()将不起作用,因为它仅适用于指标的叉积。

演示代码片段

import tensorflow as tf

A = tf.constant([[1,4,6],[2,1,5],[3,2,4]])
x = tf.constant([3,2,7])
result = tf.linalg.tensordot(tf.transpose(x), A, axes=1)
result = tf.linalg.tensordot(result, x, axes=1)
print(result)
Run Code Online (Sandbox Code Playgroud)

结果将是

>>>tf.Tensor(532, shape=(), dtype=int32)
Run Code Online (Sandbox Code Playgroud)

我想在这里提几点

  1. 不要忘记axes里面的争论tf.linalg.tensordot()

  2. 当你创建tf.zeros(5)它时,它将创建一个形状为 5 的列表,它会像[0,0,0,0,0],当你转置它时,它会给你相同的列表。但如果你像这样创建它tf.zeros((5,1)),它将是一个形状向量(5,1),结果将是

    [
    [0],[0],[0],[0],[0]
    ]
    
    Run Code Online (Sandbox Code Playgroud)

    现在您可以转置它,结果会有所不同,但我建议您执行我提到的代码片段。如果是点积,您不必为此操心太多。

如果您仍然遇到问题,我们将非常乐意为您提供帮助。