美文网首页pytorch学习
利用autorgrad实现线性回归

利用autorgrad实现线性回归

作者: 打杂算法工程师 | 来源:发表于2020-02-16 23:00 被阅读0次

利用pytorch的自动求导机制实现线性回归其实非常简单,但是在实现过程中犯了一个错误调试了很久,需要注意的是在更新梯度时候的写法,如下代码所示:

#1 正确写法则
w.data.sub_(w.grad*lr)
b.data.sub_(b.grad*lr)
# 2错误写法
w = w - w.grad*lr
b = b - grad*lr

其中错误写法导致了梯度发生了变化,错误写法导致了梯度变成了lr,然后在计算图中传递下去,如下是完成的正确实现代码:
另外还需要注意的是在算法实现部分的代码需要对梯度进行清0,否则梯度会累加

1. 生成数据

def gb(batch):
    x = t.rand(batch,1)
    y = 2*x + 3 + t.rand(batch,1)
    return x,y

2. 算法实现

w = t.rand(1,1,requires_grad=True)
b = t.zeros(1,1,requires_grad=True)
lr = 0.01 # 学习率
for i in range(5000):
    # 梯度清0
    if (w.grad is not None) and (b.grad is not None):  
        w.grad.data.zero_() 
        b.grad.data.zero_()
    x,y = gb(5)
    y_ = x*w + b.expand_as(y)
    loss = (y-y_)**2/2
#     print(loss)
    loss = loss.mean()
    loss.backward()
#     print(w,w.grad, b,b.grad)
    w.data.sub_(w.grad*lr)
    b.data.sub_(b.grad*lr)
    if i%1000 == 0:
        print(loss)
print(w,b)

相关文章

网友评论

    本文标题:利用autorgrad实现线性回归

    本文链接:https://www.haomeiwen.com/subject/micvfhtx.html