在Tensorflow

时间:2017-06-06 16:20:23

标签: 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[:,i],A[:,i],transpose_a=True))

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

2 个答案:

答案 0 :(得分:1)

您可以将矩阵自身乘以元素,然后沿轴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)

答案 1 :(得分:1)

只需一点线性代数,你就有了解决方案: enter image description here

这意味着你需要做:tf.reduce_sum(tf.square(A), axis=0)