深度学习——用PyTorch实现线性回归(B站刘二大人P5学习笔记)

本文介绍了如何使用PyTorch构建一个简单的线性模型,包括数据集构造、模型定义、损失函数和优化器的选择以及训练过程。通过创建一个线性模型类,设置损失函数为MSELoss,优化器为SGD,并进行100次迭代训练,最终输出模型的权重和偏置,以及对新输入的预测结果。
摘要由CSDN通过智能技术生成

构造一个简单神经网络(线性model)的步骤:

  • 构建数据集
x_data = torch.Tensor([[1.0] ,[2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])

  • 设计模型

把模型定义成一个类,代码模板(以后写模型都可以参考这个模板):

import torch


class LinearModel(torch.nn.Module):
    # 构造函数:初始化对象默认调用的函数
    def __init__(self):
        # 必写
        super(LinearModel, self).__init__()
        # 构造对象
        self.linear = torch.nn.Linear(1, 1)

    # 前馈任务所要进行的计算
    def forward(self, x):
        y_pred = self.linear(x)
        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(100):
    # 计算y hat
    y_pred = model(x_data)
    # 计算损失
    loss = criterion(y_pred, y_data)
    print(epoch, loss.item())

    # 所有权重每次都梯度清零
    optimizer.zero_grad()
    # 反向传播求梯度
    loss.backward()
    # 更新,step()更新函数
    optimizer.step()

 完整代码如下:

import torch

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)

    # 前馈任务所要进行的计算
    def forward(self, x):
        y_pred = self.linear(x)
        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(100):
    # 计算y hat
    y_pred = model(x_data)
    # 计算损失
    loss = criterion(y_pred, y_data)
    print(epoch, loss.item())

    # 所有权重每次都梯度清零
    optimizer.zero_grad()
    # 反向传播求梯度
    loss.backward()
    # 更新,step()更新函数
    optimizer.step()

# 输出权重和偏置
print('w=', model.linear.weight.item())
print('b=', model.linear.bias.item())

# 测试
x_test = torch.Tensor([[4.0]])
y_test = torch = model(x_test)
print('y_pred=', y_test.data)

 运行结果如图:

因为是随机梯度下降算法,所以每次训练结果都是不同的,运行结果不用拘泥于数字。


补充:

  • torch.nn.Linear类

  •  torch.nn.MSELoss类 :    

                 size_average:是否求均值

                 reduce:最终是否需要降维(一般不考虑)

  •  torch.optim.SGD类:

              params:模型中所有需要训练的参数

              lr:自定义学习率

              momentum:是否需要冲量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习CV的研一小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值