首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算三阶张量的cp分解的梯度下降法

计算三阶张量的cp分解的梯度下降法
EN

Stack Overflow用户
提问于 2020-03-28 06:18:23
回答 1查看 73关注 0票数 0

我试着做梯度下降来计算三阶张量的CP分解。我正在使用tensorly,而且我还是个初学者。我不知道如何计算梯度。

到目前为止,我们所掌握的是:

代码语言:javascript
复制
def CP_GD(T, rank, epsilon=1e-5,max_iters=100,lr=1e-2,verbose=True,errors_at_iterations=[]):
    # Initialize A, B and C

    dim1= T.shape[0]
    dim2= T.shape[1]
    dim3= T.shape[2]
    A= tl.tensor(np.random.normal(0,1,[dim1,rank]))
    B= tl.tensor(np.random.normal(0,1,[dim2,rank]))
    C= tl.tensor(np.random.normal(0,1,[dim3,rank]))


    T_approx_old = tl.kruskal_to_tensor((np.ones(rank),[A,B,C]))# YOUR CODE HERE #
    it = 1
    while True: # repeat until convergence
        # compute gradients wrt A B and C and do a gradient step




        # check for convergence:
        T_approx_new = tl.kruskal_to_tensor((np.ones(rank),[A,B,C]))
        reconstruction_error =  tl.norm(T_approx_new-T)
        errors_at_iterations.append(reconstruction_error)


        if tl.norm(T_approx_old - T_approx_new)/tl.norm(T_approx_old) < epsilon or it > max_iters:
            return (A,B,C)
        if verbose:
            print(it, " - reconstruction error: ",reconstruction_error, "convergence: ", tl.norm(T_approx_old - T_approx_new)/tl.norm(T_approx_old))

        T_approx_old = T_approx_new
        it += 1
EN

回答 1

Stack Overflow用户

发布于 2020-04-23 22:09:39

您可以手动计算渐变,也可以使用自动渐变。TensorLy有一个后端系统,可以让你使用NumPy,PyTorch,TensorFlow等运行计算。如果你使用任何支持自动渐变的后端,你可以使用自动微分直接获得渐变。例如,检查notebooks。例如,here,使用TensorLy和PyTorch通过梯度下降进行塔克分解。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60894846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档