PyTorch深度学习:用PyTorch实现线性回归
Posted 嘿化小学生578
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyTorch深度学习:用PyTorch实现线性回归相关的知识,希望对你有一定的参考价值。
课程来源:Bilibili 刘二大人《用PyTorch实现线性回归》
代码大致思路:
铺垫:
-
创建数据集、构建计算模型
-
定义损失函数和优化方式
训练:
- 通过forward函数进行前馈
- loss记录损失值
- 清除上一次的梯度值
- 反向传播并记录梯度值grad
- 借助梯度值更新权重
- 循环上述过程
测试:
- 检测最终权重值是否符合预期
笔记:
- 数据集为矩阵,3行1列,行数为样本个数,列数为该样本特征值数量
- __call__函数可以实现类对象的函数化,使对象可加直接()调用__call__函数的函数体。
如代码中的:
y_pred = self.linear(x) # 生成预测y值
y_pred = model(x_data) # 调用forward函数
- 在PyTorch在nn.Module类中实现了
__call__
方法,并在__call__
方法中调用了forward函数,因此在新建的模型中必须重写forward函数。- 由于是loss.backward()函数执行之后,grad值才开始更新,所以其应该写在optimizer.zero_grad()函数之后。
- torch中的其他优化器:torch.optim.Adagrad、torch.optim.Adam、torch.optim.Adamax、torch.optim.ASGD、torch.optim.LBFGS、torch.optim.RMSprop、torch.optim.Rprop、torch.optim.SGD...
- (补充)定义函数时参数用*args或**kwargs含义:*args指传参过程中个数可变的位置形参,所有参数用名为args的元组接受。**kwargs指传参过程中个数可变的关键字形参,所有参数用名为kwargs的字典接受。
例子:
def function1(a, b, c, x = 4, y = 5) pass function1(1, 2, 3, x = 4, y = 5) # 正常调用 def function2(*args, **kwargs) #使用不定长参数 print(args) print(kwargs) function2(1, 2, 3, x = 4, y = 5) # 调用并输出
输出结果:
完整代码:
import torch
x_data = torch.Tensor([[1.], [2.], [3.]]) # 建立数据集 3 x 1 矩阵数据集实现mini-batch
y_data = torch.Tensor([[2.], [4.], [6.]])
class LinearModel(torch.nn.Module): # 继承自Module,类中必须包含__init__和forward函数
def __init__(self):
super().__init__() # Don't care about it,just do it
self.linear = torch.nn.Linear(1, 1) # 包含两个权重的对象w和b,(1, 1)即对权重的赋初值
def forward(self, x):
y_pred = self.linear(x) # 生成预测y值
return y_pred
model = LinearModel() # 实例化模型
criterion = torch.nn.MSELoss(size_average=False) # 损失函数
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 更新权重
for epoch in range(1000): # 开始训练
y_pred = model(x_data) # 调用forward函数
loss = criterion(y_pred, y_data) #记录loss损失值
print(epoch, loss.item())
optimizer.zero_grad() # 清除上一次的梯度值
loss.backward() # 开始反向传播并写入梯度值
optimizer.step() # 通过梯度值对权重进行更新
print("w = ", model.linear.weight.item())
print("b = ", model.linear.bias.item())
x_test = torch.Tensor([4.])
y_test = model(x_test) # 测试:用训练完成的权重进行预测
print("y_pred = ", y_test.data.item())
以上是关于PyTorch深度学习:用PyTorch实现线性回归的主要内容,如果未能解决你的问题,请参考以下文章
《动手学深度学习》线性回归的简洁实现(linear-regression-pytorch)
《动手学深度学习》线性回归的简洁实现(linear-regression-pytorch)
PyTorch学习4《PyTorch深度学习实践》——线性回归(Linear Regression)