【深度学习】4-2 误差反向传播法 - 简单层的实现(层的介绍)

news2024/10/6 8:34:36

下面把构建神经网络的“层”实现为一个类。这里所说的“层”是神经网络中功能的单位。

下面先从一些简单的层开始介绍

乘法层的实现

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

现在来实现乘法层。看下面代码

class MulLayer:
	def __init__(self):
		self.x = None
		self.y = None
	
	def forward(self, x, y):
		self.x = x
		self.y = y
		out = x * y
		return out

	def backward(self, dout):
		dx = dout*self.y # 翻转x和y
		dy = dout*self.x

		return dx,dy

backward()将从上游传来的导数(dout)乘以正向传播的翻转值,然后传给下游。

下面就使用MulLayer实现前面的购买的例子(2个苹果和消费税)。看图:
在这里插入图片描述

通过乘乘法层,上图的正向传播可以像下面这样实现:

apple = 100
apple_num = 2
tax = 1.1

# layer
mul_apple_layer = MulLayer()
mul_tax_layer = MulLayer()

#forward
apple_price = mul_apple_layer.forward(apple, apple_num)
price = mul_tax_layer.forward(apple_price ,tax)
print(price)

求各个变量的导数可由backward()求出

#backward
dprice = 1
dapple_price, dtax = mul_tax_layer.backward(dprice)
dapple, dapple_num = mul_apple_layer.backward(dapple_price)

print(dapple, dapple_num, dtax)

此外,要注意backward()的参数中需要输入“关于正向传播时的输出变量的导数”。

加法层的实现

下面来实现加法节点的加法层

class AddLayer:
	def __init__(self):
		pass

	def forward(self, x, y):
		out = x+y
		return out

	def backward(self, dout):
		dx = dout*1
		dy = dout*1
		return dx,dy

下面使用加法层和乘法层,实现下图的例子:
在这里插入图片描述

实现代码如下:

apple = 100
apple_num = 2
orange = 150
orange_num = 3
tax = 1.1

# layer
mul_apple_layer = MulLayer()
mul_orange_layer = MulLayer()
add_apple_orange_layer = AddLayer()
mul_tax_layer = MulLayer()

# forward
apple_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)

#backward
dprice = 1
dall_price, dtax = mul_tax_layer.backward(dprice)
dapple_price, dorange_price = add_apple_orange_layer.backward(dall_price)
dorange, dorange_num = nul_orange_layer.backward(dorange_price)
dapple, dapple_num = mul_apple_layer.backward(dapple_price)

print(price)
print(dapple_num, dapple, dorange, dorange_num, dtax)

综上,计算图中层的实现非常简单,使用这些层可以进行复杂的导数计算

激活函数层的实现

这里把构成神经网络的层实现为一个类。先来实现激活函数的ReLU层和Sigmoid层。

现在来实现ReLU层。在神经网络的层的实现中,一般假定 forward()和tackerd0 的参数是NumPy数组。代码如下:

在这里插入图片描述

class Relu:
	def __init__(self):
		self.mask = None

	def forward(self, x):
		self.mask = (x <= 0)
		out = x.copy()
		out[self.mask] = 0

		return out

	def backward(self, dout):
		dout[self.mask] = 0
		dx = dout
		
		return dx
	

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

>>> x= np.array( [[1.0,-0.5],[-2.03.0]] )
>>>print(x)
[[1. -0.5]
[-23.]]
>>>mask=(x<=0)
>>>print(mask)
[[False True]
[True False]]

如果正向传播时的输入值小于等于0, 则反向传播的值为0,
反向传播中会使用正向传播时保存的mask,
将从上游传来的dout的mask中的元素为True的地方设为0
。 (关键思路)

Sigmoid层

计算图表示的话,如下:
在这里插入图片描述

Sigmoid层包括反向传播的计算图如下:

在这里插入图片描述

上面可以简化为

在这里插入图片描述

这样通过对节点进行集约化,可以不用在意Sigmoid层中琐碎的细节,而只需要专注它的输入和输出

另外,该结果可以进一步整理如下:
在这里插入图片描述

下面用Python来实现Sigmoid层,代码如下:

class Sigmoid:
	def __init__(self):
		self.out = None

	def forward(self,x):
		out = 1 / (1+np.exp(-x))
		self.out = out
		return out

	def backward(self, dout):
		dx = dout * (1.0 - self.out)*self.out
		return dx

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

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

相关文章

SpringBoot 如何使用 Servlet 容器

SpringBoot 如何使用 Servlet 容器 SpringBoot 是一个非常流行的 Java 开发框架&#xff0c;它提供了一个简单而强大的方式来创建基于 Servlet 容器的 Web 应用程序。本文将介绍 SpringBoot 中如何使用 Servlet 容器。 Servlet 容器简介 Servlet 容器是指能够运行 Servlet 和…

一文带你认识FPGA LCMXO2-7000HC-4FG484C 带你深入了解其原理及特点

莱迪思深力科 LCMXO2-7000HC-4FG484C MachXO2系列 可编程逻辑器件 (PLD) 由六个超低功耗、即时启动、非易失性 PLD 组成&#xff0c;可提供 256 至 6864 个查找表 (LUT) 的密度。MachXO2 系列 PLD 提供多种特性&#xff0c;例如嵌入式块 RAM (EBR)、分布式 RAM 和用户闪存 (UFM…

linux端口数量上限65535原因;linux服务端最大连接数量可以超过65535

概述 关于端口数量&#xff0c;大家都知道最多是65535个端口。 这个来源于标识端口号的变量是16位的&#xff0c;那么就是65536个&#xff0c;去掉0这个特殊端口&#xff0c;剩下65535个&#xff0c;所以理论上最大可用数量是65535。 但是实际中还有一些特殊端口已经定义好用…

sourceTree代码回滚

记一次惊心动魄的代码回滚记录&#xff01; 背景&#xff1a; 因为test分支进行Jenkins代码构建的时候发现文件引入的两个已安装的依赖没有找到&#xff0c;构建报错 可是我明明已经安装成功&#xff0c;并且package.json中也有了版本记录&#xff0c;可就是构建失败&#xf…

面试官:“同学,你做的这几个项目都不错。但怎么问QPS你就胡说呢?”

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 这位同学&#xff0c;你比上一位面试者好多了&#xff0c;你的简历中做的几个项目都不错。既有业务项目&#xff0c;也有技术项目…

电子签名软件有哪些?10大电子签名平台盘点

目录 一、电子签名软件有哪些 1.e签宝&#xff1a;国内签名领域老大哥 2.上上签&#xff1a;开创SaaS电子签极简模式 3.法大大&#xff1a;数智化签约管理平台 4.数字认证&#xff1a;中国电子认证第一股 5.契约锁&#xff1a;主攻中大型客户无缝集成各类系统 6.安心签&…

持有NPDP产品经理证书可以加薪吗?

NPDP(New Product Development Professional)是指产品经理国际资格认证&#xff0c;由美国产品开发与管理协会&#xff08;PDMA&#xff09;所发起的唯一国际公认新产品开发专业认证。NPDP是集理论、方法与实践为一体的全方位知识体系&#xff0c;为公司组织层级进行规划、决策…

破圈丨2023年绿色积分消费返利:云联惠3.0升级版【循环购】商业模式

破圈丨2023年绿色积分消费返利&#xff1a;云联惠3.0升级版【循环购】商业模式 京东供应链商品/自营商品/供应商商品 平台上面产品超过300w款产品&#xff0c;均为京东供应链货品&#xff0c;由京东统一仓储和配送&#xff0c;从源头上面杜绝假冒伪劣产品的存在&#xff0c;然…

AI绘图是什么技术?前景如何?

大家好&#xff0c;我是权知星球&#xff0c;人工智能最近大火&#xff0c;各大应用领域层出不穷&#xff0c;今天跟大家讨论一下AI绘图是什么技术&#xff1f;前景如何&#xff1f; 人工智能绘图是什么&#xff1f; 人工智能绘画是指利用人工智能进行绘画的过程&#xff0c;属…

redhat 6.4安装oracle11g RAC (三)

为数据和快速恢复去创建ASM磁盘组 只在节点rac1执行即可&#xff0c;进入grid用户下 [gridrac1 grid]$ srvctl status asm -a ASM is running on rac2,rac1 ASM is enabled. [gridrac1 grid]$ ps -ef|grep lsnr|grep -v grep|grep -v ocfs|awk {print$9} LISTENER_SCAN1 LISTE…

Databend 开源周报 第 98 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 后台服务 Dat…

强化学习从基础到进阶-案例与实践[2]:马尔科夫决策、贝尔曼方程、动态规划、策略价值迭代

【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧&#xff08;调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍&#xff1a;【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧…

zerotier自建planet

ZeroTier 是一个由 C 开发的软交换机&#xff0c;可以让多台内网机器组成一个私有的局域网。ZeroTier 的节点分为三类&#xff1a; Planet Server: 官方的根服务器&#xff0c;用于记录和配置每个局域网下客户端信息&#xff08;以下简称 Planet&#xff09;&#xff1b;Moon …

Qt学习10:MainWindow浅析

文章目录 QMainWindow的基本结构QMenuBarQToolBarQStatusBarQDockWidget QSystemTrayIcon 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 QMainWindow的基本结构 QMenuBar&#xff1a;菜单栏QToolBar&#xff1a;工具栏QDockWidget&#xff1a;浮动窗口QStatusBar&…

基于ENVI的遥感影像解译——以Landsat8数据为例(上)

遥感影像解译是一种指从图像获取信息的基本过程。即根据各专业&#xff08;部门&#xff09;的要求&#xff0c;运用解译标志和实践经验与知识&#xff0c;从遥感影像上识别目标&#xff0c;定性、定量地提取出目标的分布、结构、功能等有关信息&#xff0c;并把它们表示在地理…

火力全开,鏖战争锋|SCTF 2023圆满落幕!

2023年6月19日09:00&#xff0c;第八届XCTF国际联赛分站赛——SCTF 2023圆满落幕。本次赛事由XCTF国际联赛合作单位——成都信息工程大学Syclover战队组织&#xff0c;由赛宁网安提供技术支持。 经过持续48小时的夺旗厮杀&#xff0c;联合战队Nu1L最终力压群雄&#xff0c;夺得…

什么是mAP(mean average Precision)

Mean Average Precision&#xff0c;即 平均AP值 。AP&#xff08;Average precision&#xff09;单类标签平均&#xff08;各个召回率中最大精确率的平均数&#xff09;的精确率。AP: PR&#xff08; Precision-Recall&#xff09;曲线下面积&#xff0c;mAP(Mean Average Pre…

树莓派启用无密码 sudo

启用无密码 sudo&#xff0c;可以在不提供密码的情况下在树莓派上运行程序。 登录 Raspberry Pi 命令行界面。假设 Raspberry Pi 的默认用户名和密码分别为 pi 和 raspberry。在命令行界面中&#xff0c;键入以下命令&#xff1a; sudo nano /etc/sudoers 3. 通过添加以下行启…

被业务员缠着要数据,数据分析师除了加班还有第二种选择吗?

知乎的大数据给我推了这样一个问题&#xff1a;身为数据分析师&#xff0c;却被业务当做取数机&#xff1f; 热度很高&#xff0c;看来很多数据分析师有相似的处境。 作为一个数据分析师&#xff0c;大部分时间却忙于取数&#xff0c;即使996加班也忙不完&#xff0c;不仅没…

Word怎么删除空白页,4个方法轻松解决!

案例&#xff1a;我在编辑文档的时候会遇到空白页&#xff0c;我不能直接对它进行删除操作。我想知道如何删除Word里面的空白页&#xff1f;方法越简单越好&#xff01; Word是广泛使用的办公软件之一&#xff0c;但有时在编辑文档时会遇到一些空白页的问题。空白页的存在可能…