Python 从Tensorflow中的tf.matmul(tf.transpose(A),A)中获取对角线元素

Python 从Tensorflow中的tf.matmul(tf.transpose(A),A)中获取对角线元素,python,tensorflow,Python,Tensorflow,我有一个矩阵a,有几列,我需要计算自点积,即tf.matmul(a[:,I]),a[:,I],transpose_a=True)其中I索引a的列。一种方法是只计算tf.matmul(A,A,transpose_A=True)并提取对角线,但这涉及大量多余的乘法(所有非对角线结果都被丢弃,非对角线结果是任何大于2 x 2的矩阵的大部分结果)。另一种方法是做类似的事情 out = [] for i in range(tf.shape(A)[1]): out.append(tf.matmul(

我有一个矩阵
a
,有几列,我需要计算自点积,即
tf.matmul(a[:,I]),a[:,I],transpose_a=True)
其中
I
索引
a
的列。一种方法是只计算
tf.matmul(A,A,transpose_A=True)
并提取对角线,但这涉及大量多余的乘法(所有非对角线结果都被丢弃,非对角线结果是任何大于2 x 2的矩阵的大部分结果)。另一种方法是做类似的事情

out = []
for i in range(tf.shape(A)[1]):
    out.append(tf.matmul((A[:,i],A[:,i],transpose_a=True))

然后将
out
收集到
tf.Tensor
中。但这似乎是一个相当常见的计算,因此我希望它存在一个函数(即计算权重向量的平方范数)。

您可以将矩阵本身元素相乘,然后沿轴0求和

import tensorflow as tf
tf.InteractiveSession()

A = tf.reshape(tf.range(12), (3, 4))
tf.reduce_sum(tf.pow(A, 2), axis=0).eval()
返回

array([ 80, 107, 140, 179], dtype=int32)

只要一点线性代数,你就有了你的解决方案:

这意味着您需要执行:
tf.reduce\u sum(tf.square(A),axis=0)