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



我有一个 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

矩阵J的谱范数等于矩阵的最大奇异值。

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

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

其中J是你的矩阵。

笔记:

  • 我使用compute_uv=False因为我们只对奇异值感兴趣,而不是奇异向量。
  • J不需要是方形的。
  • 此解决方案也适用于J具有任意数量的批次维度的情况(只要最后两个维度是矩阵维度)。
  • 省略号...操作的工作方式与在 NumPy 中一样。
  • 我采用0指数,因为我们只对最大的奇异值感兴趣。

最新更新