Ale*_*tev 6 numpy linear-algebra eigenvalue
GCN后的CIFAR数据集代码如下:
xtx = np.dot(dataset.train_data[i].transpose(), dataset.train_data[i])
e, q = np.linalg.eigh(xtx)
print(np.max(e), np.min(e))
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
2.65138e+07 -0.00247511
Run Code Online (Sandbox Code Playgroud)
这是不一致的,因为它xtx
是对称正半定的。我的猜测是,这可能是由于较早地应用了 GCN,但最小特征值仍然不接近 0?
更新:所以我的矩阵的条件数是 8.89952e+09。实际上我之前忘记取出平均值,所以现在最大特征值是~573,而最小值是-7.14630133e-08。我的问题是我正在尝试做 ZCA。在这种情况下,我应该如何进行?向xtx
或向特征值添加对角线 petrubtion ?
如果特征值跨越几个数量级,则可以使用 svd 分解,以便X.T @ X = (U @ S @ V.T).T @ (U @ S @ V.T) = V @ S @ S @ V.T
.
_, s, v = np.linalg.svd( dataset.train_data[i] )
e = s[:len(v)]**2
Run Code Online (Sandbox Code Playgroud)
Nowe
保证为正数,并且假设您5e3
为较高的奇异值计算了一些值,并且舍入误差限制了 处其他 SVD 的准确性1e-7
,这意味着当您计算时,e[1] = s[1]**2
您实际上会计算出大约为 的值1e-14
。
归档时间: |
|
查看次数: |
1075 次 |
最近记录: |