张量流中的谱范数2x2矩阵

时间:2018-03-27 22:02:05

标签: python matrix tensorflow

我有一个2x2矩阵,由来自其他输入的变量J00, J01, J10, J11定义。由于矩阵很小,我能够通过首先计算轨迹和行列式来计算光谱范数

J_T = tf.reduce_sum([J00, J11])
J_ad = tf.reduce_prod([J00, J11])
J_cb = tf.reduce_prod([J01, J10])
J_det = tf.reduce_sum([J_ad, -J_cb])

然后解决二次

L1 = J_T/2.0 + tf.sqrt(J_T**2/4.0 - J_det)
L2 = J_T/2.0 - tf.sqrt(J_T**2/4.0 - J_det)
spectral_norm = tf.maximum(L1, L2)

这是有效的,但它看起来相当丑陋,并且不适用于较大的矩阵。是否有更清晰的方法(可能是我缺少的方法调用)来计算spectral_norm

1 个答案:

答案 0 :(得分:3)

矩阵J的频谱范数等于矩阵的最大singular value

因此,您可以使用tf.svd()执行奇异值分解,并获取最大的奇异值:

spectral_norm  = tf.svd(J,compute_uv=False)[...,0]

其中J是您的矩阵。

注意:

  • 我使用compute_uv=False,因为我们只对奇异值感兴趣,而不是奇异向量。
  • J不需要是正方形。
  • 此解决方案也适用于J具有任意数量的批量维度的情况(只要最后两个维度是矩阵维度)。
  • 省略号...操作works as in NumPy
  • 我接受0索引,因为我们只对最大的奇异值感兴趣。