PyTorch深度学习5-使用pytorch实现线性回归

入学之后,老板就着手我们开始做实验,复现了几个基础的分类的项目,回过头来再看刘二大人的这个基于PyTorch实现线性回归的视频,还是能很顺利的理解,现作以记录。

知识点的梳理:

  1. 数据集的选取:在pytorch中使用mini-batch,则数据集需要是矩阵的形式
    在这里插入图片描述
    每行一个数据,这样该列表就表示为一个1×3的矩阵,且数据类型是tensor类型,适用于后面的反向传播。
    且对于mini-batch的解释,这里写的特别好

我们已知在梯度下降中需要对所有样本进行处理过后然后走一步,那么如果我们的样本规模的特别大的话效率就会比较低。假如有500万,甚至5000万个样本(在我们的业务场景中,一般有几千万行,有些大数据有10亿行)的话走一轮迭代就会非常的耗时。这个时候的梯度下降叫做fullbatch。 所以为了提高效率,我们可以把样本分成等量的子集。
例如我们把100万样本分成1000份, 每份1000个样本,这些子集就称为mini batch。然后我们分别用一个for循环遍历这1000个子集。 针对每一个子集做一次梯度下降。然后更新参数w和b的值。接着到下一个子集中继续进行梯度下降。 这样在遍历完所有的mini-batch之后我们相当于在梯度下降中做了1000次迭代。 我们将遍历一次所有样本的行为叫做一个 epoch,也就是一个世代。
在mini-batch下的梯度下降中做的事情其实跟full batch一样,只不过我们训练的数据不再是所有的样本,而是一个个的子集。 这样在mini-batch我们在一个epoch中就能进行1000次的梯度下降,而在full batch中只有一次。 这样就大大的提高了我们算法的运行速度。

转载自:[https://blog.csdn.net/qq_38343151/article/details/102886304]

  1. 对于LinearModel()模型,需要自己定义,且还要继承torch.nn.Model类,同时还需要提供构造方法和重写forward函数。此外,torch.nn.Linear下的Linear是nn模块下的一个类,该组件能完成权重(W)×输入(X)+偏置(b)的计算。

  2. PyTorch下有很多优化器,不同的优化器有着不同的性能特点,其中父类parameters()能识别model下的权重并进行更新计算。
    PyTorch深度学习5-使用pytorch实现线性回归_第1张图片

使用pytorch实现神经网络步骤

PyTorch深度学习5-使用pytorch实现线性回归_第2张图片

1.构建数据集

2.自定义模型类

3.构造loss函数并创建优化器

4.迭代训练,更新权重

附完整代码及测试结果

import torch
from torch import optim #可有可无

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):  #model属于父类,nn指的是神经网络,即neural network
    def __init__(self):  #构造函数,在初始化对象时默认调用对象所使用
        super(LinearModel, self).__init__()  #调用父类参数的构造,
        self.linear = torch.nn.Linear(1, 1)  #Linear是nn模块下的一个类,该组件能完成权重(W)*输入(X)+偏置(b)
        #偏重b一般默认设置为ture
    def forward(self,x):  #前馈活动所需计算的函数
        y_pred = self.linear(x) #通过输入x调用Linear实现计算求^y
        return y_pred

model = LinearModel()

criterion = torch.nn.MSELoss(size_average=False)
# optimizer = torch.optim.SGD(model.parameters(),lr=0.01) #parameters指的是权重,lr为学习率,一般设置为0.001.0.005
# optimizer = torch.optim.Adam(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)  #性能较优


for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data) #将^y和y输入criterion函数进行计算
    print(epoch,loss.item()) #打印轮数及损失函数

    optimizer.zero_grad() #每次迭代时都需将梯度先归零,防止累加
    loss.backward()
    optimizer.step()  #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)


PyTorch深度学习5-使用pytorch实现线性回归_第3张图片

参考博客:https://blog.csdn.net/weixin_56068397/article/details/122684515

你可能感兴趣的:(深度学习,pytorch,线性回归)