【问题标题】:gradient decent to compute cp-decomposition of a third order tensor梯度下降计算三阶张量的 cp 分解
【发布时间】:2020-03-27 22:18:22
【问题描述】:

我正在尝试做梯度下降来计算三阶张量的 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

【问题讨论】:

    标签: python numpy tensorly


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-01-09
      • 2016-06-13
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      相关资源
      最近更新 更多