文章目录
1.PyTorch实现线性回归的基本步骤
- 构造数据集合
- 定义Model函数模块
- 在函数模块中构造向前传递forward()函数(也就是计算y_pred)
- 计算损失值
- 选择优化方法
- 训练周期迭代
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说明拟合效果越好
3.3优化1000次的结果
4.不同优化方式的对比
注:前文已经使用了SGD优化方式,下面将使用其他几种不同的优化方式迭代1000并次观察效果
4.1 Adagrad
4.2 Adam
4.3 Adamax
4.4 ASGD
这里看到asgd下降的速度是相当快的,我们只设置调整100次,再次观察其下降速度
ASGD = 100
可见ASGD的优化方法的下降速度还是十分快,在大约20次迭代左右就已经十分逼近真实值
4.5 RMSprop
4.6 Rprop
写在最后
本文章为《PyTorch深度学习实践》完结合集课程对应的一些课后习题解答,仅为各位同志学习参考之用
各位看官,都看到这里了,麻烦动动手指头给博主来个点赞8,您的支持作者最大的创作动力哟! <(^-^)>
才疏学浅,若有纰漏,恳请斧正
本文章仅用于各位同志作为学习交流之用,不作任何商业用途,若涉及版权问题请速与作者联系,望悉知