《PyTorch深度学习实践》 课堂笔记 Lesson4 使用PyTorch实现简单线性回归

文章目录

  • 1.PyTorch实现线性回归的基本步骤
  • 2.PyTorch的几种优化方法
  • 3.简单线性回归的实现
    • 3.1源代码实现
    • 3.2优化100次的结果
    • 3.3优化1000次的结果
  • 4.不同优化方式的对比
    • 4.1 Adagrad
    • 4.2 Adam
    • 4.3 Adamax
    • 4.4 ASGD
      • ASGD = 100
    • 4.5 RMSprop
    • 4.6 Rprop
  • 写在最后


1.PyTorch实现线性回归的基本步骤

  1. 构造数据集合
  2. 定义Model函数模块
  3. 在函数模块中构造向前传递forward()函数(也就是计算y_pred)
  4. 计算损失值
  5. 选择优化方法
  6. 训练周期迭代

2.PyTorch的几种优化方法

  • Adagrad
  • Adam
  • Adamax
  • ASGD
  • LBFGS
  • RMSprop
  • Rprop
  • SGD(随机梯度下降)

3.简单线性回归的实现

在这里我们仍然以 y = 2 x y = 2x y=2x作为例子实现,最终迭代的w =2,b =0为最终的迭代目标,选择学习率为0.01,初始化w为1

数据集如下所示

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

3.1源代码实现

# -*- coding:utf-8 -8-
"""
Author: FeverTwice
Date: 2021--08--03
"""
import torch
import numpy as np
import matplotlib.pyplot as plt

x_data = torch.tensor([[1.0], [2.0], [3.0]])  # 这里必须是一个二维矩阵
y_data = torch.tensor([[2.0], [4.0], [6.0]])


# 定义函数模块
class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel, self).__init__()  # 调用父类的构造函数
        self.linear = torch.nn.Linear(1, 1)  # 传入两个参数分别是w和b,自动构造

    def forward(self, x):
        y_pred = self.linear(x)
        return y_pred


model = LinearModel()

criterion = torch.nn.MSELoss(reduction='sum')

#选择优化方法
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# optimizer = torch.optim.Adagrad(model.parameters(), lr=0.01)
# optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
# optimizer = torch.optim.Adamax(model.parameters(), lr=0.01)
# optimizer = torch.optim.ASGD(model.parameters(), lr=0.01)
# optimizer = torch.optim.LBFGS(model.parameters(), lr=0.01)
# optimizer = torch.optim.RMSprop(model.parameters(), lr=0.01)
# optimizer = torch.optim.Rprop(model.parameters(), lr=0.01)

# 存储迭代数值
lost_vector = []
epoch_vect = np.arange(1, 101)

for epoch in range(100):
    y_pred = model(x_data)  # 前向传播
    loss = criterion(y_pred, y_data)
    print(epoch, loss.item())  # 注意loss是一个对象
    lost_vector.append(loss.item())

    optimizer.zero_grad()  # 权重的所有梯度归0
    loss.backward()  # 反向传播
    optimizer.step()  # 更新参数,即更新w和b的值

# 输出结果
print('w = ', model.linear.weight.item())  # 注意如果直接打印会直接是一个权重矩阵,我们需要强制其显示为一个数值
print('b = ', model.linear.bias.item())

# Test Model
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data.item())

# 画图
plt.plot(epoch_vect,lost_vector)
plt.show()


3.2优化100次的结果

注:y_pred默认为x=4时y的数值(即y=8),越接近8说明拟合效果越好
《PyTorch深度学习实践》 课堂笔记 Lesson4 使用PyTorch实现简单线性回归_第1张图片

2

3.3优化1000次的结果

《PyTorch深度学习实践》 课堂笔记 Lesson4 使用PyTorch实现简单线性回归_第2张图片
4


4.不同优化方式的对比

注:前文已经使用了SGD优化方式,下面将使用其他几种不同的优化方式迭代1000并次观察效果

4.1 Adagrad

《PyTorch深度学习实践》 课堂笔记 Lesson4 使用PyTorch实现简单线性回归_第3张图片

2


4.2 Adam

《PyTorch深度学习实践》 课堂笔记 Lesson4 使用PyTorch实现简单线性回归_第4张图片
2


4.3 Adamax

《PyTorch深度学习实践》 课堂笔记 Lesson4 使用PyTorch实现简单线性回归_第5张图片

2


4.4 ASGD

《PyTorch深度学习实践》 课堂笔记 Lesson4 使用PyTorch实现简单线性回归_第6张图片
2
这里看到asgd下降的速度是相当快的,我们只设置调整100次,再次观察其下降速度

ASGD = 100

《PyTorch深度学习实践》 课堂笔记 Lesson4 使用PyTorch实现简单线性回归_第7张图片
101
可见ASGD的优化方法的下降速度还是十分快,在大约20次迭代左右就已经十分逼近真实值


4.5 RMSprop

《PyTorch深度学习实践》 课堂笔记 Lesson4 使用PyTorch实现简单线性回归_第8张图片

2


4.6 Rprop

《PyTorch深度学习实践》 课堂笔记 Lesson4 使用PyTorch实现简单线性回归_第9张图片
2


写在最后

本文章为《PyTorch深度学习实践》完结合集课程对应的一些课后习题解答,仅为各位同志学习参考之用

各位看官,都看到这里了,麻烦动动手指头给博主来个点赞8,您的支持作者最大的创作动力哟! <(^-^)>
才疏学浅,若有纰漏,恳请斧正
本文章仅用于各位同志作为学习交流之用,不作任何商业用途,若涉及版权问题请速与作者联系,望悉知

你可能感兴趣的:(#,PyTorch,深度学习,python,人工智能,pytorch,机器学习)