繁体   English   中英

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

[英]gradient decent to compute cp-decomposition of a third order tensor

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

所以这是我们到目前为止所拥有的:

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

您可以手动计算梯度,也可以使用 autograd。 TensorLy 有一个后端系统,可以让您使用 NumPy、PyTorch、TensorFlow 等运行计算。如果您使用任何支持 autograd 的后端,您可以使用自动微分直接获取梯度。 例如,检查笔记本 例如, 在这里,使用 TensorLy 和 PyTorch 通过梯度下降进行 Tucker 分解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM