如何在Julia中提高Storkey的学习成绩?

问题描述

您好,我是这里的新手,而Julia 10.3中也是新手。如今,我正在研究不同数字系统中的Storkey学习规则。在我第一次尝试对这种想法进行编码时,我尝试了以下朴素代码

id   status
1   InProgress
2   Completed
3   Pending

这是主要功能

给出的“本地字段”
    function storkey_learning_first(U)
    
    # The memories are given by the columns
    row,col = size(U)
    
    # First W matrix
    W_new = zeros(row,row)
 
    for mu=1:col
        
        W_old = copy(W_new)

        for i=1:row
            for j=i:row 
                s = 0.0
                # Putting this value in the new matrix
                s += U[i,mu]*U[j,mu]
                s -= local_field_opt(W_old,U[:,mu],i,j,row)*U[j,row)*U[i,mu]
                s *= 1/row    
                
                W_new[i,j] += s
                W_new[j,i]  = W_new[i,j]
                
            end  
        end
        
    end

    return W_new
end

然后给定一个n维实值向量,两个代码都创建一个维数为(n x n)的矩阵。对于低维向量,它是有效的。但是对于高维数组,这确实很慢。实际上,我想存储维度n = 8192的向量。而且,我想使用维数较小的复数值向量或四元数,但在实际情况下我做不到更好。在第二次尝试中,我将完整的结构分为两个函数,特别是,我将两个内部循环分开,避免重复调用相同的元素:

function local_field_opt(W_old,U,row)

hij = 0.0

for k=1:row
    
    if k != i && k != j
    hij += W_old[i,k]*U[k]
    end
    
end
return  hij
end

与此同时,我获得了几秒钟。在这种情况下,如何改善语法?以及使用复数或四元数:这是否会带来相当大的额外负担?最后,到现在为止,我正在获取维度为n = 1352的向量的此时间标记

function_inner(U,W_old,W_mu,mu,row)

# Calling one time the column
U_mu = U[:,mu]


for j=1:row
    U_j_mu = U[j,mu]
    
    for i=j:row 
        
        U_i_mu = U[i,mu]
        
        s = 0.0
        
        s += U_i_mu *U_j_mu
        s -= U_i_mu *local_field_opt(W_old,U_mu,row)
        s -= local_field_opt(W_old,row)*U_j_mu
        s *= 1/row    

        W_mu[i,j] += s
        W_mu[j,i]  = W_mu[i,j]
    end  
end    
return W_mu 
end

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)