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

目录

1.数据准备

2.设计模型

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

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

5. 代码实现


课程推荐: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(),取出模型中的参数,lr为学习率
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

 不同的优化器:

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

一轮训练:

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

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()
    # 更新权重w
    optimizer.step()

5. 代码实现

1~4完整代码:

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(),取出模型中的参数,lr为学习率
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()
    # 更新权重w
    optimizer.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)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向岸看

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值