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

 误差反向传播法

前言

此为本人学习《深度学习入门》的学习笔记

四、简单层的实现

本节将用 Python 实现前面的购买苹果的例子。这里,我们把要实现的计算图的乘法节点称为“乘法层”(MulLayer),加法节点称为“加法层”(AddLayer)。

1、乘法层的实现

层的实现中有两个共通的方法(接口)forward() 和backward()forward() 对应正向传播,backward() 对应反向传播。

实现乘法层。乘法层作为 MulLayer 类,其实现过程如下所示

 

class MulLayer:def __init__(self):self.x = Noneself.y = Nonedef forward(self, x, y):self.x = xself.y = yout = x * yreturn outdef backward(self, dout):dx = dout * self.y # 翻转x和ydy = dout * self.xreturn dx, dy

__init__() 中会初始化实例变量 x 和 y,它们用于保存正向传播时的输入值。forward() 接收 x 和 y 两个参数,将它们相乘后输出。backward() 将从上游传来的导数(dout)乘以正向传播的翻转值,然后传给下游。

使用 MulLayer 实现前面的购买苹果的例子(2 个苹果和消费税)。

 

        

                    图 5-16 购买 2 个苹果

使用这个乘法层的话,图 5-16 的正向传播可以像下面这样实现

 此外,关于各个变量的导数可由 backward() 求出。

调用 backward() 的顺序与调用 forward() 的顺序相反。此外,要注意 backward() 的参数中需要输入“关于正向传播时的输出变量的导数”。比如,mul_apple_layer 乘法层在正向传播时会输出 apple_price,在反向传播时,则会将 apple_price 的导数 dapple_price 设为参数。

2、加法层的实现

class AddLayer:def __init__(self):passdef forward(self, x, y):out = x + yreturn outdef backward(self, dout):dx = dout * 1dy = dout * 1return dx, dy

加法层不需要特意进行初始化,所以 __init__() 中什么也不运行(pass 语句表示“什么也不运行”)。加法层的 forward() 接收 x 和 y 两个参数,将它们相加后输出。backward() 将上游传来的导数(dout)原封不动地传递给下游。

使用加法层和乘法层,实现图 5-17 所示的购买 2 个苹果和 3 个橘子的例子。

      

              图 5-17 购买 2 个苹果和 3 个橘子

用 Python 实现图 5-17 的计算图的过程如下所示

首先,生成必要的层,以合适的顺序调用正向传播的 forward() 方法。然后,用与正向传播相反的顺序调用反向传播的 backward() 方法,就可以求出想要的导数。

五、激活函数层的实现

将计算图的思路应用到神经网络中。把构成神经网络的层实现为一个类。先来实现激活函数的 ReLU 层和 Sigmoid 层。

1、ReLU层

激活函数 ReLU(Rectified Linear Unit)由下式(5.7)表示。

通过式(5.7),可以求出 y 关于 x 的导数,如式(5.8)所示。

在式(5.8)中,如果正向传播时的输入 x 大于 0,则反向传播会将上游的值原封不动地传给下游。反过来,如果正向传播时的 x 小于等于 0,则反向传播中传给下游的信号将停在此处。用计算图表示的话,如图 5-18 所示。

实现 ReLU 层。在神经网络的层的实现中,一般假定 forward() 和backward() 的参数是 NumPy 数组。

 

  图 5-18 ReLU 层的计算图

class Relu:def __init__(self):self.mask = Nonedef forward(self, x):self.mask = (x <= 0)out = x.copy()out[self.mask] = 0return outdef backward(self, dout):dout[self.mask] = 0dx = doutreturn dx

Relu 类有实例变量 mask。这个变量 mask 是由 True/False 构成的 NumPy 数组,它会把正向传播时的输入 x 的元素中小于等于 0 的地方保存为 True,其他地方(大于 0 的元素)保存为 False

 2、Sigmoid层

实现sigmoid函数,sigmoid函数由式(5.9)表示

用计算图表示式子(5.9)的话,则如图5-19所示

图 5-19 sigmoid 层的计算图(仅正向传播)

图 5-19 中,除了“×”和“+”节点外,还出现了新的“exp”和“/”节点。“exp”节点会进行 y = exp(x) 的计算,“/”节点会进行 y=\frac{1}{x} 的计算。

如图 5-19 所示,式(5.9)的计算由局部计算的传播构成。

下面我们就来进行图 5-19 的计算图的反向传播。这里,作为总结,我们来依次看一下反向传播的流程。

步骤 1

“/”节点表示 y=\frac{1}{x},它的导数可以解析性地表示为下式。

enter image description here

根据式(5.10),反向传播时,会将上游的值乘以 -y^2(正向传播的输出的平方乘以 -1 后的值)后,再传给下游。计算图如下所示。

{95%}

步骤 2

“+”节点将上游的值原封不动地传给下游。计算图如下所示。

{95%}

步骤 3

“exp”节点表示 y = exp(x),它的导数由下式表示。

\frac{\partial y}{\partial x}=\exp(x)\quad\quad\quad\quad\quad(5.11)

计算图中,上游的值乘以正向传播时的输出(这个例子中是 exp(-x))后,再传给下游。

{95%}

步骤 4

“×”节点将正向传播时的值翻转后做乘法运算。因此,这里要乘以 -1。

{95%}

图 5-20 Sigmoid 层的计算图

 

转载于:https://www.cnblogs.com/zyqy/p/10816953.html

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

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

相关文章

内容样式行为分离

CSS负责HTML&#xff1a;人类选不中&#xff1b;js取不到 CSS负责JS: 如果逻辑复杂&#xff0c;CSS会变慢&#xff0c;页面会变慢

CSS图片布局 flex(竖着的几张图片改为一排)

<style>.images{display: flex;align-items: flex-start;//border: 1px solid red; 有可能边框包不住这几张图片&#xff0c;但如果窗口够大&#xff0c;也可以包住//overflow: hidden; 如果写了&#xff0c;超出边框的部分会被隐藏 } </style> 布局有两种方式&a…

牡丹-曹州牡丹:曹州牡丹

ylbtech-牡丹-曹州牡丹&#xff1a;曹州牡丹菏泽牡丹&#xff0c;山东省菏泽市特产&#xff0c;中国国家地理标志产品。牡丹&#xff0c;原产中国西北部&#xff0c;秦岭和陕北山地多野生&#xff0c;栽培历史悠久&#xff0c;南北朝时已声成为观赏植物。菏泽&#xff0c;古称曹…

idea报错:Error: java: 错误: 不支持发行版本 5

我在测试类运行时&#xff0c;出现下述错误&#xff1a; 可能原因&#xff1a;java版本不一致项目编译配置使用的java版本不对 解决方案&#xff1a; 第一步&#xff1a;file---Project Structure-- Project&#xff08;两版本改为一致&#xff1a;第二、三个横框中数字都为11…

python网络爬虫基础day01

2019.5.13&#xff0c;今天在“小猿圈”跟着波波老师学习了爬虫开发的第一章和第二章&#xff0c;总结下今天学的知识&#xff1a; 爬虫基础介绍&#xff1a;   什么是爬虫&#xff1f;    - 通过编写程序&#xff0c;模拟浏览器上网&#xff0c;然后让其去互联网上抓取数…

忘记mysql数据库连接密码

本次操作所有需要用到的密令行&#xff1a; bin>net stop mysql bin>mysqld --skip-grant-tables bin>mysql mysql>use mysql mysql>update user set passwordpassword("123456") where user"root"; mysql>flush privileges; mys…

Python 基础 函数

1&#xff1a;调用函数 eg&#xff1a;调用内置函数 abs() 求绝对值 2&#xff1a;定义函数 1&#xff1a;定义一个函数要使用 def 语句&#xff0c;依次写出函数名、括号、括号中的参数和冒号:&#xff0c;然后&#xff0c;在缩进块中编写函数体&#xff0c;函数的返回值用ret…

Springmvc跨服务器文件上传报403,409错误

报403错误 Tomcat默认只读模式&#xff0c;传图片会被拒绝 解决&#xff1a;找到 Tomcat 目录---conf下---web.xml&#xff0c;打开 加入 <init-param><param-name>readonly</param-name><param-value>false</param-value> </init-param&g…

Vue中message.split().reverse().join()函数用法

1、split() 把一个字符串分割成字符串数组 把数据拆分为一个数组,括号里的 是把数据拆分为每个字符串 2、reverse() 颠倒数组中元素的顺序 只作用于数组&#xff0c;跟在split()后才能起作用&#xff0c;在一个字符串后面不起作用&#xff0c;如message.reverse() 3、join()…

单元测试——Winfrom

一、新建单元测试项目 二、单元测试可在Service或者Repository层分别创建 三、编写好代码后可运行单元测试 转载于:https://www.cnblogs.com/772933011qq/p/10863817.html

vue报错:dependencies were not found: * element-ui in ./src/main.js * element-ui/lib/theme-chalk/inde

报错信息 These dependencies were not found: * element-ui in ./src/main.js * element-ui/lib/theme-chalk/index.css in ./src/main.js 解决方案 1、 cmd进入命令行窗口&#xff0c;切入运行的项目文件夹下 2、输入 cnpm i element-ui -S(没有装淘宝镜像的使用 npm i…

Spring的配置与使用

一、Spring的组成 其中最核心的是Core Container核心容器 二、spring框架的作用&#xff1a; 对于我目前了解的spring框架&#xff0c;其中一个作用是用来降低程序间的耦合度的&#xff0c;也就是降低程序间的依耐性。 IOC&#xff1a;inversion of control 控制反转-->即将…

选择日期保存报错Invalid JSON input: Cannot deserialize value of type `java.util.Date` from String......

(spring boot vue&#xff09; 1、新增-选择日期-点击保存-报错&#xff1a;报错信息 "Invalid JSON input: Cannot deserialize value of type java.util.Date from String "2020-07-05T16:00:00.000Z": not a valid representation (error: Failed to pars…

个人冲刺10

1.昨天做了界面整体优化。 2.今天打算了解一下组成员的情况。 3.整体界面优化没有什么问题。转载于:https://www.cnblogs.com/Evak/p/10936847.html

新增或编辑保存时出错后,页面无法再次编辑

新增或编辑保存时出错后&#xff0c;页面无法再次编辑&#xff0c;除非关闭新增或编辑弹窗&#xff0c;重新打开新增或编辑页面&#xff0c;否则无法编辑 &#xff0c;如下图&#xff1a; 解决方案 在新增方法之前定义loading参数&#xff0c;在调用后台服务之前先使用loading…

avue下拉框中属性可以显示,但不能选中

1、avue下拉框中属性可以显示&#xff0c;但不能选中 追其原因&#xff0c;我对表单分组了&#xff0c;下拉框放在了group组内的column组里面&#xff0c;导致层数过多&#xff0c;产生死循环的bug 2、解决方法&#xff1a; 取消分组&#xff0c;把所有的属性放到column属性里…

1-4 无监督学习(Unsupervised Learning)

无监督学习定义&#xff1a; 【无监督学习】中没有任何的标签或者是有相同的标签或者就是没标签。所以我们已知数据集&#xff0c;却不知如何处理&#xff0c;也未告知每个数据点是什么。别的都不知道&#xff0c;就是一个数据集。你能从数据中找到某种结构吗&#xff1f;针对数…

选择日期保存后日期变成前一天(avue date)

1、问题&#xff1a;选中日期&#xff0c;保存&#xff0c;日期变成前一天 {label: 生产日期,prop: esDate,type: date,}, 2、解决&#xff1a;&#xff08;avue的官方文档&#xff09; {label: 生产日期,prop: esDate,type: date,valueFormat: yyyy-MM-dd}, 只需要加 value…

IDEA配置tomcat部署web项目时没有artifacts

重命名module可能会出现此问题 会有提示没有artifacts&#xff0c;点击Fix&#xff0c;添加artifacts以解决 debug运行可能会报错&#xff0c;查看日志说1099端口号已被使用 命令行&#xff1a; netstat -ano | find "1099" tasklist | find "840" 840是LI…

v-region 地址组件无法回显问题(选择地址保存后,打开编辑,发现刚才选择的地址【省市县乡】信息消失,信息不回显)

(Avue) 1、问题 v-region 地址组件无法回显(选择地址保存后&#xff0c;打开编辑&#xff0c;发现刚才选择的地址【省市县乡】信息消失&#xff0c;信息不回显) 选择好省市县乡后&#xff0c;保存&#xff0c;再次编辑&#xff0c;发现如下&#xff1a; 2、解决方案&#xff…