> 文章列表 > Pytorch深度学习笔记(六)用pytorch实现线性回归

Pytorch深度学习笔记(六)用pytorch实现线性回归

Pytorch深度学习笔记(六)用pytorch实现线性回归

目录

1.数据准备

2.设计模型

3.构造损失函数和优化器

4.训练周期(前馈—>反馈—>更新)


课程推荐:05.用PyTorch实现线性回归_哔哩哔哩_bilibili

线性通常是指变量之间保持等比例的关系,从图形上来看,变量之间的形状为直线,斜率是常数。

当要预测的变量 y 输出集合是无限且连续,我们称之为回归。比如,天气预报预测明天是否下雨,是一个二分类问题;预测明天的降雨量多少,就是一个回归问题。

1.数据准备

在pytorch中,计算图使用mini batch方式绘制,所以x和y是n*1的向量张量

mini batch详解,如图,线性模型的x,y都是3*1的向量张量。

2.设计模型

model = LinearModel(x_data),用于自定义计算模块,复写forward(),返回预测值

torch.nn.Linear(in_features,out_features,bias=True),in_features,out_features为输入样本和输出样本的数量

 设计模型代码:

import torch# 生成两个3*1的向量张量
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])# 继承torch.nn.Module,定义自己的计算模块
class LinearModel(torch.nn.Module):# 构造函数def __init__(self):# 调用父类构造super(LinearModel, self).__init__()# Linear对象包含两个成员张量weight和bias# 定义输入样本和输出样本的维度self.linear = torch.nn.Linear(1, 1)# 前馈函数def forward(self, x):y_pred = self.linear(x)return y_pred# 实例化自定义模型
model = LinearModel()

3.构造损失函数和优化器

torch.nn.MSELoss(size_average=True, reduce=True),size_average是否要求均值,reduce结果是否要降维

torch.optim.SGD(params, lr=required, momentum=0, dampening=0,weight_decay=0, nesterov=False),params参数,lr学习率

# 实例化损失函数,返回损失值
criterion = torch.nn.MSELoss(size_average=False)
# 实例化优化器,优化权重w
# model.parameters(),取出模型中的参数
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

 不同的优化器:

4.训练周期(前馈—>反馈—>更新)

一轮训练:

①获得预测值
②获得损失值
③梯度归零
④反向传播
⑤更新权重w

完整代码:

import torch# 生成两个3*1的向量张量
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])# 继承torch.nn.Module,定义自己的计算模块
class LinearModel(torch.nn.Module):# 构造函数def __init__(self):# 调用父类构造super(LinearModel, self).__init__()# 实例化的Linear对象包含两个成员张量weight和bias# 定义输入样本和输出样本的维度self.linear = torch.nn.Linear(1, 1)# 前馈函数def forward(self, x):# 返回x线性计算后的预测值y_pred = self.linear(x)return y_pred# 实例化自定义模型,返回预测值
model = LinearModel()
# 实例化损失函数,返回损失值
criterion = torch.nn.MSELoss(size_average=False)
# 实例化优化器,优化权重w
# model.parameters(),取出模型中的参数
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)for epoch in range(100):# 获得预测值y_pred = model(x_data)# 获得损失值loss = criterion(y_pred, y_data)# 不会产生计算图,因为__str()__print(epoch, loss)# 梯度归零optimizer.zero_grad()# 反向传播loss.backward()# 更新权重woptimizer.step()# 打印权重和偏值
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())
x_test = torch.Tensor([[4.0]])
# 测试模型
y_test = model(x_test)
print('y_pred = ', y_test.data)

英语歌曲网