随机梯度下降中的 Python 变量赋值与参考

问题描述

我编写了一个简短的 SGD 函数,并试图跟踪 SGD 如何在每一步更新 w 向量。在我看来,我想象这段代码修改w,然后将 w 的新值的副本粘贴到我用来跟踪所有中间值的列表 wsw。但是,我知道 python 使用“名称”,这意味着它在这里通过引用传递,因此列表 ws 中的所有值最终都是相同的,因为——据我所知——我本质上是通过一个每次我追加到列表时都指向同一个对象,因此所有条目最终都与 ws[max_iter-1 相同。一方面,我不确定如何干净地解决这个问题,但更广泛地说,我觉得这是一个“直观”的操作,应该得到 Python 的一些开箱即用的支持——其他人如何做到这一点东西?

def sgd(X,y,J,dJ,w0,step_size_fn,max_iter):
    w = w0 # init
    print(w)
    fs,ws = [],[] # intermediate values of losses and weights
    d,n = np.shape(X)
    for i in range(max_iter):
        rn = np.random.randint(0,n)
        # gradient descent using dJ at some random data point
        rdp = np.array(X[:,rn:rn+1])
        rl = np.array(y[:,rn:rn+1])
        # add current weights and losses therein
        ws.append(w)
        fs.append(J(rdp,rl,w))
        w -= step_size_fn(i)*dJ(rdp,w)
    return (w,fs,ws)
        
        

解决方法

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

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

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