反向传播求变量导数

反向传播求变量导数

  • 1. 相关习题
  • 2. 推导流程
    • 2.1 相关公式
    • 2.3 变量导数求解
  • 3. 代码实现
    • 3.1 参数对应
    • 3.2 代码实现

  • 以前只知道反向传播通过链式法则实现
  • 今天看书发现图片上求出来的值自己算不出来
  • 所以自己算了一下,记录一下,并运行了书中的代码
  • 相关书籍:[图灵程序设计丛书].深度学习入门:基于Python的理论与实现

1. 相关习题

在这里插入图片描述

2. 推导流程

2.1 相关公式

f = a ∗ b g = c ∗ d h = f + g = a ∗ b + c ∗ d i = h ∗ e = ( f + g ) ∗ e = ( a ∗ b + c ∗ d ) ∗ e \begin{aligned} f&= a*b\\ g&=c*d\\ h&=f+g\\ &=a*b+c*d\\ i&=h*e\\ &=(f+g)*e\\ &=(a*b+c*d)*e \end{aligned} fghi=ab=cd=f+g=ab+cd=he=(f+g)e=(ab+cde

2.3 变量导数求解

  • i

    • 最后一层的导数,初始化为1
  • e
    ∂ i ∂ e = ∂ i ∂ i ∗ ∂ i ∂ e = ∂ i ∂ i ∗ ∂ h ∗ e ∂ e = 1 ∗ h = a ∗ b + c ∗ d = 2 ∗ 100 + 150 ∗ 3 = 650 \begin{aligned} \frac{\partial i}{\partial e}&= \frac{\partial i}{\partial i}*\frac{\partial i}{\partial e}\\ &=\frac{\partial i}{\partial i}*\frac{\partial h*e}{\partial e}\\ &=1*h\\ &=a*b+c*d\\ &=2*100+150*3\\ &=650 \end{aligned} ei=iiei=iiehe=1h=ab+cd=2100+1503=650

  • h
    ∂ i ∂ h = ∂ i ∂ i ∗ ∂ i ∂ h = ∂ i ∂ i ∗ ∂ h ∗ e ∂ h = 1 ∗ e = 1.1 \begin{aligned} \frac{\partial i}{\partial h}&= \frac{\partial i}{\partial i}*\frac{\partial i}{\partial h}\\ &=\frac{\partial i}{\partial i}*\frac{\partial h*e}{\partial h}\\ &=1*e\\ &=1.1 \end{aligned} hi=iihi=iihhe=1e=1.1

  • f g

    • 因为 h = f + g h=f+g h=f+g,所以反向传播时,相加的位置,直接将导数传过去即可
    • 所以fg的导数都为1.1
  • a
    ∂ f ∂ a = ∂ f ∂ f ∗ ∂ a ∗ b ∂ a = 1.1 ∗ b = 1.1 ∗ 100 = 110 \begin{aligned} \frac{\partial f}{\partial a}&= \frac{\partial f}{\partial f}* \frac{\partial a*b}{\partial a}\\ &=1.1*b\\ &=1.1*100\\ &=110 \end{aligned} af=ffaab=1.1b=1.1100=110

  • b
    ∂ f ∂ b = ∂ f ∂ f ∗ ∂ f ∂ b = 1.1 ∗ ∂ a ∗ b ∂ b = 1.1 ∗ a = 1.1 ∗ 2 = 2.2 \begin{aligned} \frac{\partial f}{\partial b}&= \frac{\partial f}{\partial f}* \frac{\partial f}{\partial b}\\ &=1.1* \frac{\partial a*b}{\partial b}\\ &=1.1*a\\ &=1.1*2\\ &=2.2 \end{aligned} bf=ffbf=1.1bab=1.1a=1.12=2.2

  • c
    ∂ g ∂ c = ∂ g ∂ g ∗ ∂ g ∂ c = 1.1 ∗ ∂ c ∗ d ∂ c = 1.1 ∗ d = 1.1 ∗ 3 = 3.3 \begin{aligned} \frac{\partial g}{\partial c}&= \frac{\partial g}{\partial g}* \frac{\partial g}{\partial c}\\ &=1.1* \frac{\partial c*d}{\partial c}\\ &=1.1*d\\ &=1.1*3\\ &=3.3 \end{aligned} cg=ggcg=1.1ccd=1.1d=1.13=3.3

  • d
    ∂ g ∂ d = ∂ g ∂ g ∗ ∂ g ∂ d = 1.1 ∗ ∂ c ∗ d ∂ d = 1.1 ∗ c = 1.1 ∗ 150 = 165 \begin{aligned} \frac{\partial g}{\partial d}&= \frac{\partial g}{\partial g}* \frac{\partial g}{\partial d}\\ &=1.1* \frac{\partial c*d}{\partial d}\\ &=1.1*c\\ &=1.1*150\\ &=165 \end{aligned} dg=ggdg=1.1dcd=1.1c=1.1150=165

3. 代码实现

3.1 参数对应

参数代码参数
a dapple_num
bdapple
cdorange
ddorange_num
edall_price
f dapple_price
gdorange_price
hdall_price
i dprice

3.2 代码实现

  • 相关代码
    # 乘法类
    class MulLayer:def __init__(self):self.x = Noneself.y = Nonedef forward(self, x, y):""":param x: 价格:param y: 数量 或 税:return: 总价"""self.x = xself.y = yout = x * yreturn outdef backward(self, dout):dx = dout * self.ydy = dout * self.xreturn dx, dyclass AddLayer:def __init__(self):passdef forward(self, x, y):"""价格相加:param x: 苹果总价:param y: 句子总价:return: 总价"""out = x + yreturn outdef backward(self, dout):"""相加的求导直接传递,相当于乘以1:param dout: 导数:return:"""dx = dout * 1dy = dout * 1return dx, dyif __name__ == '__main__':apple,apple_num = 100,2orange,orange_num = 150,3tax = 1.1# 实例化类 layermul_apple_layer = MulLayer()                                            # 计算苹果的价格mul_orange_layer = MulLayer()                                           # 计算橘子的价格add_apple_orange_layer = AddLayer()                                     # 价格相加mul_tax_layer = MulLayer()                                              # 计算税后价格# 前向传播 forwardapple_price = mul_apple_layer.forward(apple, apple_num)                 # 苹果价格*苹果数量orange_price = mul_orange_layer.forward(orange, orange_num)             # 橘子价格*橘子数量all_price = add_apple_orange_layer.forward(apple_price, orange_price)   # 苹果总价+句子总价price = mul_tax_layer.forward(all_price, tax)                           # 计算税后价格# 反向传播 backwarddprice = 1dall_price, dtax = mul_tax_layer.backward(dprice)dapple_price, dorange_price = add_apple_orange_layer.backward(dall_price)dapple, dapple_num = mul_apple_layer.backward(dapple_price)dorange, dorange_num = mul_orange_layer.backward(dorange_price)# 总价print("price:", int(price))print("dprice:", dprice)print("dtax:", dtax)print("dall_price:", dall_price)# 苹果print("dapple_price:", dapple_price)print("dapple_num:", int(dapple_num))print("dapple:", dapple)# 橘子print("dorange_price:", dorange_price)print("dorange_num:", int(dorange_num))print("dorange:", dorange)
    
  • 结果
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/103550.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一讲使用IDEA创建Java工程——HelloWorld

一、前言导读 为了能够让初学者更快上手Java,不会像其他书籍或者视频一样,介绍一大堆历史背景,默认大家已经知道Java这么编程语言了。本专栏只会讲解干货,直接从HelloWord入手,慢慢由浅入深,讲个各个知识点,这些知识点也是目前工作中项目使用的,而不是讲一些老的知识点…

java学习004

常用数据结构对应 php中常用的数据结构是Array数组,相对的在java开发中常用的数据结构是ArrayList和HashMap,它们可以看成是array的拆分,一种简单的对应关系为 PHPJAVAArray: array(1,2,3)ArrayListlArray: array(“name” > “jack”,“…

OpenEuler华为欧拉系统安装

OpenEuler华为欧拉系统安装 一、OpenEuler简介1、OpenEuler概述2、OpenEuler特性 二、OpenEuler部署安装1、安装前配置2、安装引导3、选择语言4、安装信息摘要 三、欧拉系统安装图形化界面1、需要在超级管理员,在root权限下操作2、启动图形化界面 四、手动安装VMwar…

系统报错mfc100u.dll丢失的解决方法(完美解决dll问题)

系统文件mfc100u.dll丢失和出错,极有可能是盗号木马、流氓软件等恶意程序所导致,其感染相关文件并加载起来,一旦杀毒软件删除被感染的文件,就会导致相关组件缺失,游戏等常用软件运行不起来,且提示“无法启动…

验证码识别DLL ,滑块识别SDK,OCR图片转文字,机器视觉找物品

验证码识别DLL ,滑块识别SDK 你们用过哪些OCR提取文字,识图DLL,比如Opencv,Labview机器视觉找物品之类?

共创无线物联网数字化新模式|协创数据×企企通采购与供应链管理平台项目成功上线

近日,全球无线物联网领先者『协创数据技术股份有限公司』(以下简称“协创数据”)SRM采购与供应链项目全面上线,并于近日与企企通召开成功召开项目上线总结会。 基于双方资源和优势,共同打造了物联网特色的数字化采购供…

连接pgsql数据库 sslmode sslrootcert sslkey sslcert 参数的作用

sslmode 参数的作用 sslmode 参数用于指定数据库连接时使用的 SSL 加密模式。SSL(Secure Sockets Layer)是一种加密协议,用于保护数据在客户端和服务器之间的传输过程,以增加数据传输的安全性。sslmode 参数可以设置不同的值&…

leetcode刷题之283:移动零

问题 实现思路 首先, 将dest指向-1 位置, cur指向下标为0 的位置, 在cur遍历的过程中: 1) 遇到非零元素则与下标dest1 位置的元素交换, 2) 若遇到零元素则只继续cur遍历. 下标为1 的位置上是 非零元素 执行1) 交换得到右图结果 随后cur 得到下图结果 下标为2 的位置上是零…

工程师使用IT服务台软件可以解决哪些问题?

现如今企业数字化建设已初具规模,业务系统基本已告一段落,而下一步关注的重点则从技术转向管理,如何能让这些系统更好运行起来,如何提高管理效率已是重中之重。在此向您推荐一款高效的IT服务管理工具——ServiceDesk Plus&#xf…

GEEMAP 基本操作(一)如何拉伸图像

图像拉伸是最基础的图像增强显示处理方法,主要用来改善图像显示的对比度,地物提取流程中往往首先要对图像进行拉伸处理。图像拉伸主要有三种方式:线性拉伸、直方图均衡化拉伸和直方图归一化拉伸。 GEE 中使用 .sldStyle() 的方法来进行图像的…

Docker容器学习:部署安装Docker基础使用

目录 1、安装Docker-CE 1)参考阿里云的yum安装 2)二进制安装docker(推荐、生产环境使用较多) 3)配置Docker镜像加速 2、下载系统镜像(Ubuntu、 centos) 1)先查看我们所需的镜像…

视频转云存的痛点

现在整个运营商体系里面,有大量的视频转云存储的需求,但是视频云存储有一个比较大的痛点,就是成本! 成本一:存储成本; 我们以1000路2M视频转云存,存储时间为90天为例(B端存储时间有…

【ARM】Day6 cotex-A7核UART总线实验

cotex-A7核UART总线实验 1. 键盘输入一个字符‘a’,串口工具显示‘b’ 2. 键盘输入一个字符串"nihao",串口工具显示“nihao” uart.h #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_rcc.h" #include "stm3…

IDEA常用插件之类Jar包搜索Maven Search

文章目录 IDEA常用插件之类Jar包搜索Maven Search说明安装插件使用方法1.搜索自己要搜的jar包2.根据类名搜索 IDEA常用插件之类Jar包搜索Maven Search 说明 它可以帮助用户快速查找和浏览Maven中央存储库中可用的依赖项和插件。它可以帮助用户更方便地管理项目依赖项。 安装…

【3ds Max】练习——制作衣柜

目录 步骤 一、制作衣柜顶部 二、制作衣柜门板 三、制作衣柜底部 四、制作柜子腿部 五、制作柜子底板 步骤 一、制作衣柜顶部 1. 首先创建一个平面,然后将图片素材拖入平面 2. 平面大小和图片尺寸比例保持一致 3. 单机鼠标右键,选择对象属性 勾选…

Springboot热部署

手动启动热部署 开启开发者工具 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> </dependency>激活热部署&#xff1a; Ctrl F9 关于…

Tomcat10安装及配置教程win11

Tomcat10安装及配置教程win11 Tomcat下载链接 Tomcat官网 Tomcat官网地址 https://tomcat.apache.org/ Tomcat的版本列表 点击上图中左侧红框内**Which version?**即可得下图 下载Tomcat 点击上图中左侧红框内红框内tomcat版本即可得下图&#xff0c;下载zip包 解压zip包…

Ubuntu20.04安装Nvidia显卡驱动教程

1、安装驱动前一定要更新软件列表和安装必要软件、依赖&#xff08;必须&#xff09; sudo apt-get update #更新软件列表 sudo apt-get install g sudo apt-get install gcc sudo apt-get install make 2、禁用nouveau nouveau是Ubuntu自带的显卡驱动&#xff0c;但他…

七夕学算法

目录 P1031 [NOIP2002 提高组] 均分纸牌 原题链接 : 题面 : 思路 : 代码 : P1036 [NOIP2002 普及组] 选数 原题链接 : 题面 : 思路 : 代码 : P1060 [NOIP2006 普及组] 开心的金明 原题链接 : 题面 : 思路 : 01背包例题 : 代码 : P1100 高低位交换 原题…

Windows下搭建Tomcat HTTP服务,发布外网远程访问

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器&#xff0c;不仅名字很有趣&#xff0…