第四章.误差反向传播法—简单层的实现(加法层(AddLayer)+乘法层(MulLayer))

news2024/11/27 10:32:05

第四章.误差反向传播法

4.1 简单层的实现

本章主要讲述的是加法层(AddLayer)和乘法层(MulLayer)的实现过程。

1.加法层(AddLayer)

从正向传播和反向传播两个层面进行分析。

1).示例:

  • 以z=x+y为对象,观察它的传播。z=x+y的导数:∂z/∂x=1,∂z/∂y=1
    在这里插入图片描述

2).图像说明:

  • 正向传播:(灰色箭头:从左到右进行计算)

    ①.加法节点“+”,用来计算x和y的和,然后传递给下一个节点z。

  • 反向传播:(黑色箭头:从右向左进行计算)

    ①.从上游传递过来的导数值设置为:∂L/∂z,乘以1,然后传递给下游。

  • 总结:

    ①.加法节点的反向传播只乘以1,所以输入的值会原封不动的流到下一个节点
    在这里插入图片描述

3).代码实现:

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


add_layer = AddLayer()

# 正向传播
x, y = 5, 10
sum = add_layer.forward(x, y)
print('正向传播:', sum)

# 反向传播
dsum = 1.3
dx, dy = add_layer.backward(dsum)
print('正向传播:', dx, dy)

4).结果展示:

在这里插入图片描述

2.乘法层(MulLayer)

从正向传播和反向传播两个层面进行分析。

1).示例:

  • 以z=xy为对象,观察它的传播。z=xy的导数:∂z/∂x=y,∂z/∂y=x
    在这里插入图片描述

2).图像说明:

  • 正向传播(灰色箭头:从左到右进行计算)

    ①.乘法节点“x”,用来计算x和y的乘积,然后传递给下一个节点z。

  • 反向传播(黑色箭头:从右向左进行计算)

    ①.从上游传递过来的导数值设置为:∂L/∂z,乘以正向传播时输入信号的“翻转值”后传递给下游。

  • 总结:

    ①.乘法节点的反向传播会将上游的值乘以正向传播时的输入信号的“翻转值”后传递给下游。
    在这里插入图片描述

3).代码实现:

  • 示例:太郎在超市买了2个100日元一个的苹果,消费税是10%,计算消费金额:
    在这里插入图片描述

·代码:

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
        dy = dout * self.x
        return dx, dy


mul_apple_layer = MulLayer()
mul_tax_layer = MulLayer()

apple = 100
apple_num = 2
tax = 1.1

# 正向传播
apple_price = mul_apple_layer.forward(apple, apple_num)
price = mul_tax_layer.forward(apple_price, tax)
print('price:', price)

# 反向传播
dprice = 1
dapple_price, dtax = mul_tax_layer.backward(dprice)
dapple, dapple_num = mul_apple_layer.backward(dapple_price)

print('apple,apple_num,tax:', str(dapple) + "," + str(dapple_num) + "," + str(dtax))

4).结果展示:

在这里插入图片描述

3.链式法则

  • 反向传播是基于链式法则的

1).性质:

  • 如果某个函数用复合函数表示,则该复合函数的导数可以用构成复合函数的各个函数导数的乘积表示。

2).数学式:

  • 比如z=(x+y)2
    在这里插入图片描述

4.加法层和乘法层的联合使用

1).示例:

  • 示例:太郎在超市买了2个苹果,3个橘子,苹果每个100日元,橘子每个150日元,消费税是10%,计算消费金额。
    请添加图片描述

2).代码:

# 乘法层
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
        dy = dout * self.x
        return dx, dy


# 加法层
class AddLaye:
    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


mul_apple_layer = MulLayer()
mul_orange_layer = MulLayer()
mul_tax_layer = MulLayer()
add_layer = AddLaye()

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

# 正向传播
apple_price = mul_apple_layer.forward(apple, apple_num)
orange_price = mul_orange_layer.forward(orange, orange_num)
apple_orange_price = add_layer.forward(apple_price, orange_price)
price = mul_tax_layer.forward(apple_orange_price, tax)
print('price:', price)

# 反向传播
dprice = 1
dapple_orange_price, dtax = mul_tax_layer.backward(dprice)
dapple, dorange = add_layer.backward(dapple_orange_price)
dapple_price, dapple_num = mul_apple_layer.backward(dapple)
dorange_price, dorange_num = mul_orange_layer.backward(dorange)
print('apple_price,apple_num,tax:', str(dapple_price) + "," + str(dapple_num) + "," + str(dtax))
print('orange_price,orange_num,tax:', str(dorange_price) + "," + str(dorange_num) + "," + str(dtax))

3).结果:

在这里插入图片描述

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

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

相关文章

从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。随着小卫星星座的普及,对地观测已具备多次以上的全球覆盖…

DVWA靶场通关和源码分析

文章目录一、Brute Force1.low2、medium3、High4、Impossible二、Command Injection1、Low2、Medium3、High三、CSRF1、Low2、Medium3、High4、Impossible四、File Inclusion1、Low2、Medium3、High五、File Upload1、Low2、Medium3、High4、Impossible六、 SQL注入1、Low2、Me…

关于catkin的一些笔记以及资料连接

大佬们早就不用catkin_make编译节点了,快来瞅瞅他们使用的啥 https://zhuanlan.zhihu.com/p/399753815 https://catkin-tools.readthedocs.io/en/latest/index.html# ROS 编译系统 catkin 详解 https://www.jianshu.com/p/7fccfe18d7d3 ROS学习笔记(六…

【20230206-0209】哈希表小结

哈希表一般哈希表都是用来快速判断一个元素是否出现在集合里。哈希函数哈希碰撞--解决方法:拉链法和线性探测法。拉链法:冲突的元素都被存储在链表中线性探测法:一定要保证tableSize大于dataSize,利用哈希表中的空位解决碰撞问题。…

linux性能优化-内存buffer/cache区分

# 注意不同版本的free输出可能会有所不同 $ freetotal used free shared buff/cache available Mem: 8169348 263524 6875352 668 1030472 7611064 Swap: 0 0 0本文目的用来区分free中…

linux——守护进程守护刷抖音程序不被意外退出

先搞清楚几个概念:udev:设备管理工具,以守护进程的方式工作。位于应用层,主要用于监听内核硬件状态,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等守护进程:守护…

vue 最详细教学篇(三)

文章目录vue2-cli 项目文件分析示例项目解析router-linkrouterrouter-viewmain.jspackage.jsonvue2-cli 项目 vue-cli>> 文件分析 从上图分析项目文件 1. node_modules // npm 所有下载文件包都在里面 2. public // 根目录文件, 存放index.html和一些脚本文件 3. sr…

CSDN每日一练:小桥流水人家

题目名称:小桥流水人家 时间限制:1000ms内存限制:256M 题目描述 在n*m的地图上,存在一个喷水点(x,y). 如果相邻的位置低于有水的地方,水就能流到相邻的某位置。 已知各个地方的海拔高度,求水的最大覆盖个格…

[js基础]ECMAScript2015(ES6)精要知识点(下)

模块化模块就是在单个文件中声明的JavaScript代码。我们可以用JS代码直接从其他文件中导入函数、变量和类。在NodeJS之前,由于没有过于复杂的开发场景,前端是不存在模块化的,后端才有模块化。NodeJS诞生之后,它使用CommonJS的模块…

filebrowser logo和样式自定义及免密访问

这两天接到项目一个需求,客户需要文件管理存储服务,看了下大概的功能,计划用源码开发的,但是看后期这块调整也不大,就采用开源的项目进行即可,开源项目对比后,发现filebrowser比较适合我&#x…

Spring如何解决循环依赖

今天面试了同程旅行,面试官问到了这个问题,所以今天来总结学习一下 Spring是如何解决循环依赖问题? 前言 Spring的依赖注入分为 setter注入和 构造器注入 这里说的解决循环依赖主要指的是:单例模式下的setter循环依赖 如果是&a…

ThreadLocal使用与原理

目录一、ThreadLocal1.ThreadLocal简介1.1 是什么2.能干嘛1.3 api介绍1.4 实战1.5 通过上面代码总结2.从阿里ThreadLocal规范开始3.ThreadLocal源码分析3.1 Thread,ThreadLocal,ThreadLocalMap 关系3.2 总结4.ThreadLocal内存泄露问题4.1 什么是内存泄漏…

PCIE 学习笔记(入门简介)

PCIE 学习笔记书到用时方恨少啊,一年前学PCIE的笔记,再拿出来瞅瞅。发到博客上,方便看。PCIE基础PCIE和PCI的不同PCIE采用差分信号传输,并且是dual-simplex传输——每条lane上有TX通道和RX通道,所以每条lane上的信号是…

DBeaver连接达梦数据库

1、下载Dbeaver安装包 1、官网下载:Download | DBeaver Community 2、下载完成后双击运行.exe文件,进行安装 2、配置达梦数据库驱动 1、达梦数据库驱动下载:Mybatis 框架 | 达梦技术文档 2、为DBeaver添加驱动 3、自定义DM驱动管理器的相关配…

购买低代码平台,要考量哪些指标?

近些年来,低代码平台的热度在逐渐上升,可以看出企业数字化转型得速度也在逐渐加快。企业的数字开发需求越来越强,市场之间的竞争也愈演愈烈。特别是对于中小型企业,既要考虑到产品功能需求,又要考虑成本压力&#xff0…

安卓小游戏:飞机大战

安卓小游戏:飞机大战 前言 前面写了十二篇自定义view的博客,说实话写的还是有点无聊了,最近调整了一下,觉得还是要对开发有热情,就写了点小游戏,现在抽时间把博客也写一写,希望读者喜欢。 需…

渲染速度特别慢,使用云渲染会快多少?

设计师在使用软件制作效果图和动画师在制作动画时,其中有一个比较关键的环节就是渲染成像,渲染的效率主要跟使用的电脑显卡或CPU性能有关,如果性能太低,渲染的速度会很慢,拉长了项目整体的交付周期,云渲染速…

反转链表的两种方法

大家好,今天和大家分享的是反转链表的两种方法,第一种是用泛型编程里面的STL,第二种是利用多个指针进行操作,小孩子才做选择,建议两个都学。我们往下看:一.使用vector容器ps:该方法对内存的需求…

LeetCode刷题--- 430. 扁平化多级双向链表(双指针)

文章目录一、编程题:430. 扁平化多级双向链表(双指针)1.题目描述2.示例1:3.示例2:4.示例3:5.提示:二、解题思路1.思路2.复杂度分析:3.算法图解三、代码实现总结一、编程题&#xff1…

网页防篡改实验(6)

实验简介 实验所属系列:网络攻防工具 实验对象: 本科/专科信息安全专业 相关课程及专业:信息网络安全概论、计算机网络 实验时数(学分):2学时 实验类别:实践实验类 实验目的 1、了解网页防篡改…