PyTorch深度学习——反向传播算法及代码实例(B站刘二大人P4学习笔记)

反向传播算法(backpropagation)代码实现(基于python且不使用框架) 本文致力于对反向传播算法的原理代码实现,因此代码设计部分不会使用任何的神经网络框架,为读者刨析反向传播算法最底层的原理,而且对于理论部分的知识会相对粗略地进行介绍,如果你是已经完全了解反向传播算法原理的同学,可以直接跳转到附录的代码汇总部分。 阅读详情

1 为什么要引入反向传播算法?

       在之前的学习中,我们仅仅学习了只有一层的神经网络的计算,例如模型函数为y=x*w,在使用梯度下降算法进行训练的时候,很轻松就可以利用求导公式计算出\frac{\partial loss}{\partial w}。

       但是在神经网络中不可能仅仅只有一层,神经网络就像我们大脑的神经系统,由很多层攀枝交错,经过多层函数的嵌套,不断的使我们训练的函数逼近真实的函数。如图所示是一个多层神经网络的示例图。

       经过多层的嵌套,参数数量不断增加,我们很难利用求导公式直接求出\frac{\partial loss}{\partial w}。所以这时我们引入反向传播算法。

2 反向传播算法原理

       反向传播算法就类似于我们高数中所学的复合函数求导,例如两层的神经网络,就类似于两层的复合函数f(g(x)) ,这时求f(g(x))  对x的导数,就可以先计算\frac{\partial f(g(x))}{\partial g(x)},再计算\frac{\partial g(x)}{\partial x},两数相乘就计算出了\frac{\partial f(g(x))}{\partial x }。如图所示是反向传播算法的计算原理(先前馈,后反馈):

        此模型的计算图如下图所示:

3 代码实例

import torch

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

# torch.Tensor()生成新的张量
w = torch.Tensor([1.0])
# 是否需要计算梯度?——True
w.requires_grad = True


def forward(x):
    return x * w


def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) ** 2


# .item()的作用主要是把数据从tensor取出来,变成python的数据类型
print("训练前的预测是", 4, forward(4).item())
for epoch in range(100):
    for x, y in zip(x_data, y_data):
        l = loss(x, y)
        # 利用PyTorch的反向传播函数求梯度
        l.backward()
        # 这里是数值计算,w一定要取data值,tensor做加法运算会构建运算图,消耗内存
        print('\tgrad:', x, y, w.grad.item())
        w.data = w.data - 0.01 * w.grad.data

        # 每次反向传播的数据要清零
        w.grad.data.zero_()
    print("progress:", epoch, l.item())
print("训练之后的预测值是", 4, forward(4).item())

 注意:1、torch.Tensor()作用是生成新的张量

            2、w.requires_grad = True  意思是:是否需要计算梯度?——True

            3、.item()的作用主要是把数据从tensor取出来,变成python的数据类型

            4、.backward()函数:反向传播求梯度

            5、w一定要取data值进行数值计算,tensor做加法运算会构建运算图,消耗内存

            6、w.grad.data.zero_()  : 每次反向传播的数据要清零,否则梯度值是每次计算相加的总额

4 运行结果部分截图如下所示:

本节课作业如下链接:

深度学习——Pytorch反向传播学习实例(B站刘二大人P4作业)_Learning_AI的博客-优快云博客

PyTorch:梯度计算之反向传播函数backward() 介绍Pytorch中的DCG机制、backward()函数,并说明backward()函数的参数 阅读详情

相关推荐

反向传播公式推导与Python代码简单实现

之前一直对反向传播机制一知半解,最近花了点时间把这个问题想了想,记录于此。反向传播时神经网络学习能力的具体体现,他表示损失函数对参数的梯度反向流动,以此来更新网络中的参数值。在这期间需要注意的是,网络的可学习参数值是自变量,输入为可学习参数的权重,损失函数是因变量。其核心思想时链式求导法则。一个反向传播的全过程包括误差传播,可学习参数的更新。以全连接神经网络为例,一个完整的正向传播如下图所示:这是一个二分类的网络前向传播图,每个节点表示一个神经元,其包含可学习参数W和b。

weixin_47656519的博客 1269

深度学习04—反向传播算法(用于参数更新、troch实现)

(1)反向传播:该方法主要是应用链式法则的方法,求loss关于w和b的导数;(2)关于如下步骤中,l.backward()会将前向的各部梯度存入,而红色的两个代码会形成“计算图”;(3)其中:w是Tensor(张量类型),Tensor中包含data和grad,data和grad也是Tensor。grad初始为None,调用l.backward()方法后w.grad为Tensor,故更新w.data时需使用w.grad.data。

m0_55196097的博客 6229

刘二大人《Pytorch深度学习实践》代码(一)

刘二大人《Pytorch深度学习实践》代码(一) 文章目录刘二大人《Pytorch深度学习实践》代码(一)前言一、P2 线性模型二、P3 梯度下降算法三、P4 反向传播 前言 有理论基础,但是编程很垃圾,就在B站上找Pytorch的视频,随手点开的视频《PyTorch深度学习实践》完结合集,讲的很好,想记录一下老师用来举例子的代码(有个别看视频的时候写的注解仅供参考) 一、P2 线性模型 菜鸡刚上手碰到的两个问题: (1)导入matplotlib的时候忘记了后面的.pyplot (2)最后显示图像

weixin_44738880的博客 3308

深度学习——PyTorch反向传播学习实例(B站刘二大人P4作业)

作业内容:如图所示函数模型,数据集:x_list[ ] = [1,2,3],y_list[ ] = [2,4,6] (1)画出计算图; (2)利用PyTorch实现代码。

Learning_AI的博客 2283

《PyTorch深度学习实践》B站视频学习笔记

其中in_features和out_features都是指单个样本的维度。是否求均值在每个batch数量都一样时对结果没有影响。torch.optim.SGD()中需要传入的params(参数)是指需要更新的参数,model.parameters()是将模型中所有的参数都取出来。

m0_48610901的博客 965

刘二大人《PyTorch深度学习实践》

刘二大人《PyTorch深度学习实践》线性模型 线性模型 损失函数是针对一个样本的 training set得到的是一个平均平方误差MSE 穷举法绘制损失曲线:numpy和matplotlib import numpy as np import matplotlib.pyplot as plt #数据集 x_data = [1.0,2.0,3.0] y_data = [2.0,4.0,6.0] #定义模型 def forward(x): return x * w #定义损失函数 def loss

baimenglin的博客 3558

【Pytorch深度学习实践】B站up刘二大人课程笔记——目录与索引(已完结)

从有代码的课程开始讨论 Lecture02——Linear Model 本课程的主要任务是构建一个完整的线性模型: 导入numpy和matplotlib库; 导入数据 x_data 和 y_data; 定义前向传播函数: forward:输出是预测值y_hat 定义损失函数: loss:损失函数定义为MSE:均方根误差 创建两个空列表,因为后面绘图的时候要用: 分别是横轴的w_list和纵轴的mse_list 开始计算(我觉得这里没有训练的概念,只是单纯的计算每一个数据对应的预测值,然

weixin_42306148的博客 1万+

《Pytorch深度学习实践》课程合集(刘二大人)笔记

2 线性模型 深度学习步骤 数据集 —— 拿到的训练集,要分成两部分,训练集,交叉验证集 和 测试集 模型 训练 推理 ML常用损失函数

竦貊的博客 5793

【B站_刘二大人pytorch深度学习实践】笔记作业代码合集

手动训练:线性模型,梯度下降,BP Pytorch框架训练:线性回归,LogisticRegression,多维特征输入,加载数据集,多分类,CNN,RNN

m0_58586235的博客 3840

【可信数据空间-连接器技术架构设计方案】

一句话概括连接器是可信数据空间的“数据保镖”和“外交官”。连接器就是一个部署在你本地的软件代理,它代表你安全地对外提供数据服务,确保在共享数据价值的同时,牢牢守住数据的所有权和控制权。它是实现“数据可用不可见”这一理想的关键技术部件。一个生动的比喻:银行的金库和接待员想象一下,你的数据就是藏在银行金库里的黄金和钞票。金库(你的内部数据库): 绝对安全,外人绝对不能进。接待员(连接器): 坐在银行大厅里,负责与客户打交道。客户向接待员提出请求:“我想取1000元。

u014716614的博客 2270

斯坦福HumanPlus机器人核心技术解析:从HST强化学习框架到HIT模仿学习的实现路径

本文深入解析了斯坦福HumanPlus人形机器人的核心技术实现路径。其核心在于HST强化学习框架与HIT模仿学习架构的协同:HST作为“小脑”,通过rsl_rl框架在仿真中训练稳健的低级运动控制;HIT作为“大脑”,基于改进的Transformer架构学习高级任务规划。文章详细拆解了从算法原理、代码实现到硬件部署的全流程,为复现这一前沿机器人系统提供了实战指南。

weixin_29082143的博客 281

PyTorch教程—B站刘二大人笔记

PyTorch教程—B站刘二大人笔记

weixin_53236432的博客 1956

MOOS-ivp 实验三 MOOS简介(3)

MOOS-ivp 实验三 MOOS简介(3) 继上一篇文章继续对实验进行记录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录MOOS-ivp 实验三 MOOS简介(3)六、A Simple Example with pXRelay1.pXRelay基本使用2.pXRelay简单例子3.pXRelay实验七、First Experiments in Modifying MOOS App Code1.下载一个MOOS模板文件2.打开MOOS模板文件总结 六、A Simple E

weixin_44151170的博客 2534

刘二大人Pytorch课程笔记

刘二大人pytorch笔记

qq_45114168的博客 2882

Latext安装(二)WinEdt安装+激活教程

常用的LaTeX安装方案是TeXLive + WinEdt。TeXLive 是LaTeX的运行环境,而 WinEdt 则是编写LaTeX文档的编辑器。安装好TexLive之后,再安装WinEdt。这里介绍的是WinEdt的安装和激活教程。

j_l_sheng的博客 4万+

别再只会用官网例子了!Vxe-Table过滤功能深度自定义:从下拉框到服务端筛选的完整配置流程

本文深入解析Vxe-Table表格组件的过滤功能,从基础UI定制到服务端筛选的完整实现流程。通过实战案例演示如何超越官方示例,实现下拉框、日期范围等复杂过滤交互,并详细讲解混合过滤策略与性能优化技巧,帮助开发者应对大数据量场景下的表格筛选需求。

weixin_42526353的博客 205

Pytorch深度学习实践笔记4(b站刘二大人)

Back propagation (BP),训练神经网络的目标是优化代价函数cost,使得cost找到以一个全局或者局部最优值。让cost尽可能的接近0,这样得到的weights和bias是最好的,由于需要不断的调整参数让cost收敛,cost在梯度的相反反向下降最快,所以提出了BP算法,就是来计算weights和bias的梯度(偏导数的,加速训练时的收敛速度,避免无效的训练。

发狂的小花的博客 1305

TwinCAT3 实时核异步通信:基于ADS的C++ Server/Client数据交换实战解析

本文深入解析了在TwinCAT3实时核中,如何利用ADS协议实现C++ Server与Client之间的异步数据交换。文章从核心概念入手,详细阐述了实时核、ADS通信及异步机制,并通过实战步骤指导环境搭建、路由配置、Server端服务创建与Client端请求发起,重点剖析了Req/Ind/Res/Con异步回调模型,旨在帮助开发者构建高效、非阻塞的实时工业控制应用。

purple的博客 469

《PyTorch深度学习实践》完结合集--B站刘二大人学习总结

无

mumawei123的博客 3240

世界职业院校技能大赛财经赛道项目参考逐字稿五

世界职业院校技能大赛财经赛道项目参考逐字稿五

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 134

UFS软件分区介绍

本文主要介绍了ufs软件分区管理的概况,能够使大家对软件分区有个大体的认识

肥匪斐's blogs 1万+

【PyTorch】PyTorch深度学习实践|视频学习笔记|P1-P5

刘老师PyTorch深度学习实践课程的P1-P5,代码与笔记

kodoshinichi的博客 5672

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

刘二大人 PyTorch深度学习实践 笔记 P4 反向传播

刘二大人 PyTorch深度学习实践 笔记 P4反向传播

qq_44948213的博客 1428

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深度学习:反向传播算法

反向传播(Backpropagation, BP)算法作为深度学习的核心算法,运用链式法则高效计算神经网络中各参数的梯度,为模型优化指明方向。本文将详细讲解该算法的原理、实现及优化技巧,并附上完整的代码实例。算法优点缺点适用场景批量GD稳定收敛计算开销大,内存要求高小数据集随机GD计算快,可在线学习收敛不稳定大数据集,在线学习小批量GD平衡计算效率和稳定性需要调batch size大多数场景Momentum加速收敛,减少震荡需要调动量参数深网络,高维参数。

wyy202206174248的博客 2000

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

刘二大人《PyTorch深度学习实践》p4反向传播

在机器学习和深度学习领域中,张量(tensor)是一个多维数组(数组可以是标量、向量、矩阵等)。在PyTorch中,张量是一种重要的数据结构,用于存储和操作多维数据。数据还是我们一直从p2开始到现在的三组学习时长与学分的数据,x为学习时长,y为获得的学分,推测x=4时,y=?,也就是要求我们预测学习4小时,可以获得多少学分。第一次学张量的话可以去看看这个视频,浅显易懂。建议跟着老师的思路先着手计算一遍再去写代码。预测:w1=1,w2=1,b=1。

xzrrr的博客 1005

笔记|(b站)刘二大人:pytorch深度学习实践(代码详细笔记,适合零基础)

pytorch深度学习实践 笔记中的代码是根据b站刘二大人的课程所做的笔记,代码每一行都有注释方便理解,可以配套刘二大人视频一同使用。 用PyTorch实现线性回归 # 1、算预测值 # 2、算loss # 3、梯度设为0,并反向传播 # 3、梯度更新 import torch x_data = torch.Tensor([[1.0], [2.0], [3.0]]) y_data = torch.Tensor([[2.0], [4.0], [6.0]]) # 构造线性模型,后面都是使用这样的模

weixin_43267897的博客 1万+
上一篇: PyTorch深度学习——梯度下降算法、随机梯度下降算法及实例(B站刘二大人P3学习笔记)
下一篇: 深度学习——PyTorch反向传播学习实例(B站刘二大人P4作业)
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

学习CV的研一小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值