Loading

Pytorch学习笔记 2 使用Pytorch实现线性回归

import torch
from torch.autograd import Variable

设置参数

w = Variable(torch.randn(1), requires_grad = True)
b = Variable(torch.randn(1), requires_grad = True)
w, b

设置损失函数

def get_loss(y_, y):
    res = torch.mean((y-y_)**2)
    return res

设置要求的回归

def model(x):
    return w*x+b

代入数据

x = torch.Tensor([1,2,3,4,5])
y = torch.Tensor([6, 7, 8, 9, 10])

结果如下

image

使用简单的方法完成回归

epoch = 10000    # 训练的轮次
for i in range(epoch):
    y_ = model(x)
    loss = get_loss(y_, y)   #带入损失函数
    loss.backward()          # 求梯度
    w.data = w.data -1e-2 *w.grad.data   # 根据梯度更新参数
    b.data = b.data - 1e-2*b.grad.data   # 根据梯度更新参数
    w.grad.zero_()
    b.grad.zero_()

使用优化器实现回归

引入一个新类 torch.nn

Parameter其用途和Variable相同,不同的是它可以被自动注册在module中,且默认可求导

from torch import nn
optimizer = torch.optim.SGD([w, b], lr=0.01) #首先注册优化器
for i in range(epoch):
    y_ = model(x)
    loss = get_loss(y_, y)   #带入损失函数
    
    loss.backward()
    
    optimizer.step()    #全部迭代过程都成了这个命令
    optimizer.zero_grad()     #记得还原为0

结果如下

image

优化器也可使用Adam,此时可以选取一个较大的学习率作为初始值

posted @ 2021-09-20 00:42  笑云博文  阅读(47)  评论(0)    收藏  举报