误差反向传播是指,对于每次求出的Loss(损失),通过链式求导法则和梯度下降法,更新所有要学习的参数。
例如,对于线性模型:
y^=x∗ω+b\hat{y}=x*\omega+by^​=x∗ω+b
其可训练的参数就是ω\omegaω与bbb。

PyTorch提供了很好的基于计算图的误差反向传播机制,也就是当我们建立完各个参数之间的运算关系之后,一步backward(),就可以求出它对于所有require_grad = True的变量的偏导数,以方便进一步进行梯度下降(GD)运算。

注:PyTorch的两点反人类设计,一是默认不求偏导,requires_grad = True需要手动设置,二是梯度默认累积,需要手动清零

一、自定义数据

x_data = [1.,2.,3.]
y_data = [3.,6.,9.]
#使用PyTorch,最好把所有数据预先转换成Tensor格式,方便处理
x_data,y_data = map(torch.tensor,(x_data,y_data)
)

我们依旧用此数据,寻找最合适的ω\omegaω。

二、初始化权重
权重初始化的方式很多,对于一个14*128的权重矩阵,我们可以这样定义。需要注意,dtype要说明为float类型,定义requires_grad = True.

w1 = torch.randn((14,128),dtype = float,requires_grad = True)

本例子中,只有一个ω\omegaω,因此我们这样初始化该权重:

w = torch.tensor([10.],requires_grad = True)

需要注意,不要先将w设置为int类型,然后在设置其require_grad。应该在一句话中设置其为float类型的tensor,并设置requires_grad = True.

三、前向传播

#前向传播
def forward(x):return x*w

四、定义损失函数(返回值为tensor变量,是ω\omegaω的函数,即返回值可以对ω\omegaω求偏导)

#定义损失函数
def loss(x,y):tot = sum((x-y)**2)return tot/len(x)

五、梯度下降过程
**格外注意,每次使用完梯度后,要对该变量的梯度清零,否则梯度是累加的

for epoch in range(100):e_l.append(epoch)#1.计算预测值,y_pred是w的函数y_pred = forward(x_data)#2.计算损失值,由于y_pred是w的函数,ls也是w的函数ls = loss(y_pred,y_data)#注,只使用tensor变量的数值时,用item()ls_l.append(ls.item())#3.误差在计算图上依据链式法则反向传播ls.backward()w_l.append(w.item())#4.梯度下降更新权值w.data = w.data - 0.01*w.grad.data#只修改数值,则用.data,否则会生成额外的计算图#梯度值清零,否则会累加w.grad.zero_()

六、实验结果
1、损失随epoch的变化

2、w随epoch的变化(最后稳定在3,和事实符合得很好)

PyTorch学习之误差反向传播相关推荐

  1. 深度学习入门-误差反向传播法(人工神经网络实现mnist数据集识别)

    文章目录 误差反向传播法 5.1 链式法则与计算图 5.2 计算图代码实践 5.3激活函数层的实现 5.4 简单矩阵求导 5.5 Affine 层的实现 5.6 softmax-with-loss层计 ...

  2. 深度学习之误差反向传播法

  3. 深度学习之学习笔记(九)—— 误差反向传播法

    误差反向传播法() 对神经网络模型而言,梯度下降法需要计算损失函数对参数的偏导数,如果用链式法则对每个参数逐一求偏导,这是一个非常艰巨的任务!这是因为: 模型参数非常多--现在的神经网络中经常会有上亿 ...

  4. 机器学习入门(14)— 神经网络学习整体流程、误差反向传播代码实现、误差反向传播梯度确认、误差反向传播使用示例

    1. 神经网络学习整体流程 神经网络学习的步骤如下所示. 前提 神经网络中有合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为学习.神经网络的学习分为下面 4 个步骤. 步骤1(mini-ba ...

  5. 技术图文:如何利用 C# 实现 误差反向传播 学习规则?

    背景 我们在 如何利用 C# 对神经网络模型进行抽象? 中完成了神经网络的抽象结构: 三个接口:激活函数.有监督学习.无监督学习 三个抽象类:神经元.网络层.网络拓扑 我们在 如何利用 C# 实现神经 ...

  6. 深度学习入门|第5章 误差反向传播法(二)

    误差反向传播法 前言 此为本人学习<深度学习入门>的学习笔记 四.简单层的实现 本节将用 Python 实现前面的购买苹果的例子.这里,我们把要实现的计算图的乘法节点称为"乘法层 ...

  7. 深度学习入门笔记(六):误差反向传播算法

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

  8. 深度学习 --- BP算法详解(误差反向传播算法)

    本节开始深度学习的第一个算法BP算法,本打算第一个算法为单层感知器,但是感觉太简单了,不懂得找本书看看就会了,这里简要的介绍一下单层感知器: 图中可以看到,单层感知器很简单,其实本质上他就是线性分类器 ...

  9. 深度学习入门-基于python的理论与实现(五)误差反向传播法

    目录 回顾 1 计算图 1.1局部计算 1.2 计算图的优点是什么 1.3 反向传播的导数是怎么求? 1.3.1加法节点的反向传播 1.3.2 乘法节点的反向传播 1.3.3 购买苹果的反向传播 1. ...

  10. 深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法

    深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法 摘要 一.神经元 二.前馈网络 2.1 Delta学习规则 2.2 目标函数J(w) 三.误差反向传播算法(BP算法 ...

最新文章

  1. 《MonoTouch开发实践指南》一3.6 小结
  2. git切换到旧版本_github上怎么切换到某次提交?
  3. Swift之深入解析类和结构体的本质
  4. 原型共享数据 原型简单语法 原型中方法是可以相互访问 实例对象属性方法层层搜索
  5. makefile中的shell调用---注意事项
  6. css html5简介,HTML5 简介......
  7. 性能提升五十倍:消息队列延时聚合通知的重要性
  8. cisco 反转多路复用的妙用
  9. 小型pascal编译器C语言代码,Pascal简单编译器
  10. FPGA——三段式状态机(1)
  11. 开源项目推荐:office办公软件,绘图软件
  12. 怎么学计算机玩游戏,如何才能录制手机玩游戏的视频-电脑自学网
  13. git.exe push --progress origin master:master To https://192.168.3.145:10102/r/~lifan/tms-vue.git !
  14. P2P软件工作原理是什么?
  15. cmake中添加引用动态链接_CMake 添加头文件目录,链接动态、静态库(添加子文件夹)...
  16. dc元数据和html描述资源,在HTML中使用DC元数据
  17. python modis数据拼接_Python批处理MODIS_NDVI数据
  18. 深入浅出WPF知识点汇总一
  19. Java手写单例模式
  20. 2022年制冷与空调设备安装修理考试练习题及答案

热门文章

  1. 上行带宽,下行带宽和内网带宽的区别及相关问题
  2. 【转载】 mybatis入门系列四之动态SQL
  3. python渐变颜色表_python中带颜色渐变的图形
  4. 新冠疫情加速医疗废物处置行业发展,我国医废处置能力达6245吨/天
  5. 苹果专用视频播放器Elmedia Video Player pro
  6. android编程微博的发送,基于Android手机微博客户端的开发.doc
  7. 图片标签及以图搜图场景应用
  8. 【PROTEUS】使用PROTEUS与电脑串口调试助手进行通讯
  9. Typora图片上传 —— PicGo-Core篇
  10. 基于微信小程序的信访投诉系统开发与实现