繁体   English   中英

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

[英]Get diagonal elements from tf.matmul(tf.transpose(A), A) in 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[:,i],A[:,i],transpose_a=True))

然后收集outtf.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_sum(tf.square(A), axis=0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM