【发布时间】:2019-04-17 01:33:54
【问题描述】:
我对 tensor 和 tensorly Library 非常陌生。我在 jeankossaifi 上遇到了张量分解的最佳示例之一,但我需要一个示例tensorly 函数 non_negative_tucker() 通过扩展上面链接上的示例(用于 Olivetti 数据集)进行张量分解。
【问题讨论】:
标签: python tensorflow tensor tensorly
我对 tensor 和 tensorly Library 非常陌生。我在 jeankossaifi 上遇到了张量分解的最佳示例之一,但我需要一个示例tensorly 函数 non_negative_tucker() 通过扩展上面链接上的示例(用于 Olivetti 数据集)进行张量分解。
【问题讨论】:
标签: python tensorflow tensor tensorly
界面和robust_pca差不多。
让我们创建一个随机示例张量X,:
import tensorly as tl
import numpy as np
X = tl.tensor(np.random.random((10, 11, 12)))
您可以按如下方式应用鲁棒张量 PCA:
from tensorly.decomposition import robust_pca
D, E = robust_pca(X)
这给你一个低秩张量D,和一个稀疏的E,这样D + E = X(大约)。
相反,非负 Tucker 会给你一个非负核心和一些非负因素。请注意,现在您还必须为分解指定等级。
from tensorly.decomposition import non_negative_tucker
core, factors = non_negative_tucker(X, rank=(12, 12, 12), n_iter_max=1000)
您可以使用这些重构张量并检查重构误差:
reconstruction = tl.tucker_to_tensor(core, factors)
error = tl.norm(reconstruction - X)/tl.norm(X)
您可以查看该函数的 API page。
【讨论】:
core, tucker_factors,rec_errors, mode = non_negative_tucker(X, rank=tucker_rank, n_iter_max=100, init='random')tucker_reconstruction = tl.tucker_to_tensor(core, tucker_factors)visualise_images(tucker_reconstruction, 12, 4)我在显示图像时没有得到正确的结果。我刚刚扩展了jeankossaifi的示例。
non_negative_tucker 不返回重建错误或模式。正确的用法是我在帖子中写的,例如core, factors = non_negative_tucker(X, rank=(12, 12, 12), n_iter_max=1000).
data = fetch_olivetti_faces() X = data.images X = X.astype(np.float64) X -= X.mean() tucker_rank = [80, 80, 80] core, tucker_factors = non_negative_tucker(X, rank=tucker_rank, n_iter_max=100, init='random') tucker_reconstruction = tl.tucker_to_tensor(core, tucker_factors) visualise_images(tucker_reconstruction, 12, 4) 输出仍然是一组模糊图像。代码如有错误请指正。
core, tucker_factors = tucker(X, rank=tucker_rank, n_iter_max=100, tol=10e-10, init='svd')。