Triple tensor product with Tensorflow 使用Tensorflow进行三重张量积

huangapple go评论58阅读模式
英文:

Triple tensor product with Tensorflow

问题

在Tensorflow 2中,您可以使用以下代码计算x' * A * y的点积:

import tensorflow as tf

# 假设您已经定义了矩阵 A, 向量 x, 和向量 y

result = tf.linalg.matmul(tf.transpose(x), tf.linalg.matmul(A, y))

这将给您一个标量结果,即x' * A * y的点积。

英文:

Suppose I have a matrix A and two vectors x,y, of appropriate dimensions. I want to compute the dot product x' * A * y, where x' denotes the transpose. This should result in a scalar.

Is there a convenient API function in Tensorflow to do this?

(Note that I am using Tensorflow 2).

答案1

得分: 5

Use tf.linalg.tensordot(). See the documentation

As you have mentioned in the question that you are trying to find dot product. In this case tf.matmul() will not work, as it is only for cross product of matrices.

Demo code snippet:

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)

And the result will be

>>>tf.Tensor(532, shape=(), dtype=int32)

Few points I want to mention here:

  1. Don't forget the axes argument inside tf.linalg.tensordot()

  2. When you create tf.zeros(5) it will create a list of shape 5 and it will be like [0,0,0,0,0], when you transpose this it will give you the same list. But if you create it like tf.zeros((5,1)), it would be a vector of shape (5,1) and the result will be

    [
    [0],[0],[0],[0],[0]
    ]
    

Now you can transpose this, and the result will be different, but I recommend you do the code snippet I have mentioned. In case of dot product, you don't have to bother much about this.

If you are still facing issues, will be very happy to help you.

英文:

Use tf.linalg.tensordot(). See the documentation

As you have mentioned in the question that you are trying to find dot product. In this case tf.matmul() will not work, as it is only for cross product of metrices.

Demo code snippet

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)

And the result will be

>>>tf.Tensor(532, shape=(), dtype=int32)

Few points I want to mention here

  1. Don't forget the axes argument inside tf.linalg.tensordot()

  2. When you create tf.zeros(5) it will create a list of shape 5 and it will be like [0,0,0,0,0], when you transpose this it will give you the same list. But if you create it like tf.zeros((5,1)), it would be a vector of shape (5,1) and the result will be

     [
     [0],[0],[0],[0],[0]
     ]
    

Now you can transpose this and the result will be different, but I recommend you do the code snippet I have mentioned. In case of dot product you don't have to bother much about this.

If you are still facing issues, will be very happy to help you.

答案2

得分: 1

仅执行以下操作

```python
import tensorflow as tf

x = tf.constant([1,2])
a = tf.constant([[2,3],[3,4]])
y = tf.constant([2,3])


z = tf.reshape(tf.matmul(tf.matmul(x[tf.newaxis,:], a), y[:, tf.newaxis]),[])
print(z.numpy())

返回

>>> 49

<details>
<summary>英文:</summary>

Just do the following,

import tensorflow as tf

x = tf.constant([1,2])
a = tf.constant([[2,3],[3,4]])
y = tf.constant([2,3])

z = tf.reshape(tf.matmul(tf.matmul(x[tf.newaxis,:], a), y[:, tf.newaxis]),[])
print(z.numpy())


Returns 

>>> 49


</details>



# 答案3
**得分**: 0

只需使用`tf.transpose`和乘法运算符,如下所示:
`tf.transpose(x)* A * y`。

<details>
<summary>英文:</summary>

Just use `tf.transpose` and multiplication operator like this:
 `tf.transpose(x)* A * y` .

</details>



# 答案4
**得分**: 0

基于您的示例:

```py
x = tf.zeros(5)
A = tf.zeros((5,5))

怎么样

x = tf.expand_dims(x, -1)
tf.matmul(tf.matmul(x, A, transpose_a=True), x)
英文:

Based on your example:

x = tf.zeros(5)
A = tf.zeros((5,5))

How about

x = tf.expand_dims(x, -1)
tf.matmul(tf.matmul(x, A, transpose_a=True), x)

huangapple
  • 本文由 发表于 2020年1月4日 00:42:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/59582206.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定