【问题标题】:Nonnegative tensor decomposition example using Tensorly使用 Tensorly 的非负张量分解示例
【发布时间】:2019-04-17 01:33:54
【问题描述】:

我对 tensortensorly Library 非常陌生。我在 jeankossaifi 上遇到了张量分解的最佳示例之一,但我需要一个示例tensorly 函数 non_negative_tucker() 通过扩展上面链接上的示例(用于 Olivetti 数据集)进行张量分解。

【问题讨论】:

    标签: python tensorflow tensor tensorly


    【解决方案1】:

    界面和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) 输出仍然是一组模糊图像。代码如有错误请指正。
    • 你想达到什么目的?您是否需要因素和核心是非负的?如果没有,请尝试 Tucker(如果您不需要分解样本维度,则尝试使用 partial_tucker)。图像的尺寸也为 64x64,但您在这些尺寸上选择了 80 的排名,因此您过度参数化。最后,svd 是比随机更好的初始化。所以,有了 tucker,你可以试试core, tucker_factors = tucker(X, rank=tucker_rank, n_iter_max=100, tol=10e-10, init='svd')
    • 谢谢,它工作得非常完美。感谢张量库。还有一件事你在文章中提到了 add_noise() 函数,但即使我更新了张量,我也没有得到这个函数。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2014-09-04
    • 2022-01-05
    • 1970-01-01
    • 2017-04-07
    • 2019-01-30
    相关资源
    最近更新 更多