码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【PyTorch】深度学习实践之 用PyTorch实现线性回归 Linear Regression with Pytorch


    本文目录

    • 课堂笔记
      • PyTorch框架
        • A. 准备数据集
        • B. 设计模型
        • C. 构造损失函数和优化器
        • D. 写训练周期
      • 实现代码:
      • 结果:
    • 课后练习:不同优化器,损失降低差别
    • 学习资料
    • 系列文章索引

    课堂笔记

    使用pytorch完成如下:
    [图片]

    PyTorch框架

    [图片]

    A. 准备数据集

    [图片]

    B. 设计模型

    不再需要手工推算梯度公式,重点在于构造计算图:
    [图片]

    在 loss 处调用backward对整个图进行反向传播,注意loss一定要是标量,因此要对loss求和,根据需求看是否需要求均值。
    [图片]

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

    [图片]

    [图片]

    D. 写训练周期

    [图片]

    实现代码:

    代码汇总如下:

    import torch
    import matplotlib.pyplot as plt
    
    #loss  必须是一个标量才可以用backward。
    
    #1.准备数据集
    x_data = torch.Tensor([[1.0],[2.0],[3.0]])
    y_data = torch.Tensor([[2.0],[4.0],[6.0]])
    
    #2.使用Class设计模型
    class LinearModel(torch.nn.Module):
        #构造函数,初始化
        def __init__(self):
            super(LinearModel,self).__init__()
            self.liner = torch.nn.Linear(1,1)  #(1,1)表示输入和输出的维度
            
        #前向传播函数
        #forward()相当于对父类_init_()进行重载   
        def forward(self,x):
            y_pred = self.liner(x)
            return y_pred
        
    model = LinearModel()  #创建类LinearModel的实例
    
    #3.构建损失函数和优化器的选择
    criterion = torch.nn.MSELoss(size_average=False)
    optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
    
    #4.进行训练迭代
    epoch_list =[]
    loss_list=[]
    for epoch in range(1000):
        y_pred = model(x_data)
        loss = criterion(y_pred,y_data)
        print(epoch,loss.item())  #.item()获取数值大小
        
        #由.backward()计算的grad将被累积。 因此,在反向传播之前,记住将梯度设置为0。
        optimizer.zero_grad()
        loss.backward()    
        optimizer.step()  #进行更新update
        epoch_list.append(epoch+1)
        loss_list.append(loss.item())
    
    #输出权重w和偏置b
    print('w=',model.liner.weight.item())
    print('b=',model.liner.bias.item())
    
    #测试模型
    x_test = torch.Tensor([4.0])
    y_test = model(x_test)
    print('y_pred = ',y_test.data)
    
    # 画图
    plt.plot(epoch_list,loss_list)
    plt.xlabel('epoch')
    plt.ylabel('loss')
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    结果:

    [图片]

    课后练习:不同优化器,损失降低差别

    [图片]

    • torch.optim.Adagrad
      [图片]

    • torch.optim.Adam
      [图片]

    • torch.optim.Adamax
      [图片]

    • torch.optim.ASGD
      [图片]

    • torch.optim.LBFGS
      参考资料:https://blog.csdn.net/gdymind/article/details/82708920
      使用多次运算,更改训练部分代码

    for epoch in range(1000):
        #由.backward()计算的grad将被累积。 因此,在反向传播之前,记住将梯度设置为0。
        def closure():
            y_pred = model(x_data)
            loss = criterion(y_pred,y_data)
            print(epoch,loss.item())  #.item()获取数值大小
            optimizer.zero_grad()
            loss.backward()  
            return loss 
        optimizer.step(closure)  #进行更新update
        epoch_list.append(epoch+1)
        loss_list.append(loss.item())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    [图片]

    • torch.optim.RMSprop
      [图片]

    • torch.optim.Rprop
      [图片]

    • torch.optim.SGD
      [图片]


    学习资料

    • https://blog.csdn.net/qq_42585108/article/details/108143202

    系列文章索引

    教程指路:【《PyTorch深度学习实践》完结合集】 https://www.bilibili.com/video/BV1Y7411d7Ys?share_source=copy_web&vd_source=3d4224b4fa4af57813fe954f52f8fbe7

    1. 线性模型 Linear Model
    2. 梯度下降 Gradient Descent
    3. 反向传播 Back Propagation
    4. 用PyTorch实现线性回归 Linear Regression with Pytorch
    5. 逻辑斯蒂回归 Logistic Regression
    6. 多维度输入 Multiple Dimension Input
    7. 加载数据集Dataset and Dataloader
    8. 用Softmax和CrossEntroyLoss解决多分类问题(Minst数据集)
    9. CNN基础篇——卷积神经网络跑Minst数据集
    10. CNN高级篇——实现复杂网络
    11. RNN基础篇——实现RNN
    12. RNN高级篇—实现分类
  • 相关阅读:
    【序列比对】Needleman-Wunsch(全局)和Smith-Waterman(局部)算法py实现(多条回溯路径,三叉树思路,超详细注释)
    LVS集群
    【算法每日一练]-图论(保姆级教程 篇3(遍历))#图的遍历 #奶牛牧场 #杂务
    《安富莱嵌入式周报》第322期:自制10KV电子负载,史上最详细的电池系列资料,创意洞洞板任意互联,开源USB分析仪,英特尔雷电5, QNX功能安全免费课程
    JVM原理(一):JVM运行时数据区域的分析
    MBTI答题应用小程序
    [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
    Photoshop 笔记
    数据结构代码
    Spring Cloud Gateway集成sentinel进行网关限流
  • 原文地址:https://blog.csdn.net/qq_43800119/article/details/126415458
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号