【 线性回归 Linear-Regression torch模块实现与源码详解 深度学习 Pytorch笔记 B站刘二大人(4/10)】

14 篇文章 0 订阅
11 篇文章 1 订阅

torch模块实现与源码详解 深度学习 Pytorch笔记 B站刘二大人 深度学习 Pytorch笔记 B站刘二大人(4/10)

介绍

至此开始,深度学习模型构建的预备知识已经完全准备完毕。
从本章开始就开始按照实际研究与开发中的流程进行深度学习模型的构建。

实现步骤:

  1. 准备数据集
  2. 设计深度学习模型,计算y_hat
  3. 用pytorch封装功能实现loss函数和 优化函数
  4. 进行顺序训练循环,前馈,反馈,更新
    在这里插入图片描述
    在构建的过程中同样需要注意,使用tensor数据类型,使用mini-batch形式:一次性求出多种样本的输出结果。
    并运算思维转换为矩阵运算,在进行数据输入时要使用两个中括号

在这里插入图片描述
完成了数据的设置后,需要求解出权重w的关于损失函数loss的梯度解析式
大型项目通常使用pytorch封装好的模块,在计算过程中将自动生成运算图。
下图是一个最简单仿射模型,是一个基础线性单元:其数学表达式为
预测值y_hat = 权重w* 输入数据 x +偏置量b
当输出和输出维度不同时,例如下图输入x是41的向量,而输出是31的向量,按照矩阵乘法的运算规则,权重参数w应当是一个3*4的数值矩阵
在这里插入图片描述

基本模型类

在这里插入图片描述
上图是构建的运算模型,从torch中的深度学习模型类module进行继承,并通过魔法方法super进行重写,设置模型中仅有一个单输入单输出的线性层。使用该方法的好处是从moudel进行继承可以自动构造反向传播函数。

之后定义向前函数forward,记得要在原始函数后再加上形参x

完成模型构建后进行实例化:model = LinearModel()
在这里插入图片描述

额外的python编程技巧

Python编程技巧,在定义对象可调用函数__call__()是,形参定义为*args和 *kwargs,其中args将输入的未命名的参数自动形成元组,kwargs将传递参数组成词典
在这里插入图片描述
在这里插入图片描述
对指向索引
在这里插入图片描述

代码解读与实现

模板计算步骤:
1.计算y_hat
2.计算损失loss 2.5 之前的梯度清零
3. backward()计算累积梯度
4. update更新
在这里插入图片描述

"""
our model class should be inherit from nn.Module, which is base class for all neural network modules.
member methods __init__() and forward() have to be implemented
class nn.linear contain two member Tensors: weight and bias
class nn.Linear has implemented the magic method __call__(),which enable the instance of the class can
be called just like a function.Normally the forward() will be called 
我们模型类应该继承自nn.Module,它是所有神经网络模块的基类。
必须实现成员方法__init__()和forward()
class nn.linear包含两个成员张量:权重和偏差
class nn.linear实现了魔法方法__call__(),这使得类的实例可以
就像函数一样被调用。通常会调用forward()
"""
import torch

x_data = torch.Tensor([[1.0], [2.0], [3.0]])  # 第一个[]为将三个输入组合为一组输入向量,第二个[]将数据标志为Tensor数据类型
y_data = torch.Tensor([[2.0], [4.0], [6.0]])  # 同样第一个[]将输出组合为向量,第二个[]将数据标志为Tensor数据类型


class LinearModel(torch.nn.Module):     # 定义类,从torch.nn.Module 继承
    def __init__(self):                 # 魔法方法定义构造函数
        super(LinearModel, self).__init__()     # super继承父类的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)    # 通过MSE(交叉熵)计算损失

optimizer = torch.optim.SGD(model.parameters(), lr=0.01)    # 通过SGD方法(随机梯度下降法)进行动态更新优化

for epoch in range(150):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print(epoch, loss)

    optimizer.zero_grad()       # 将上一次的梯度清零,释放内存
    loss.backward()     # 反向获取损失梯度
    optimizer.step()    # 根据损失梯度更新模型参数,进行性能优化

# Output weight and bias
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.item())

作业

使用如下优化器尝试模型效果
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

狗头狗不狗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值