深度学习入门(9)神经网络Affine与Softmax层的计算图表示方式及其误差反向传播的代码实现

news2025/1/16 4:17:46

 《深度学习入门》系列文章目录

深度学习入门 (1)感知机

深度学习入门(2)神经网络

深度学习入门(3)神经网络参数梯度的计算方式

深度学习入门(4)【深度学习实战】无框架实现两层神经网络的搭建与训练过程

深度学习入门(5)如何对神经网络模型训练结果进行评价

深度学习入门(6)误差反向传播基础---计算图与链式法则使用

深度学习入门(7)误差反向传播计算方式及简单计算层的实现

深度学习入门(8)激活函数ReLU和 Sigmoid的计算图表示方式及其误差反向传播的代码实现

前几篇博文介绍了计算图基础、简单层的实现以及激活函数的层实现。本篇文章主要介绍神经网络中Affine层与sofmax层的计算图及其反向传播层的代码实现。

目录

1 Affine与Softmax层的实现

1.1 Affine层

1.2 批量版的Affine层

1.3 Softmax-with-Loss层


1 Affine与Softmax层的实现

1.1 Affine层

神经元的加权和可以用 Y = np.dot(X, W) + B计算出来。然后,Y 经过激活函数转换后,传递给下一层。这就是神经网络正向传播的流程。

神经网络的正向传播中进行的矩阵的乘积运算在几何学领域被称为仿射变换 。将进行仿射变换的处理实现为“Affine

 

Y = np.dot(X, W) + B,计算图如下:

 

 式中WTT表示转置。转置操作会把W的元素(i, j)换成元素(j, i)

 

 X和αL/αX形状相同, WαL/αW形状相同。从下面的数学式可以很明确地看出X
αL/αX形状相同。

1.2 批量版的Affine层

前面介绍的Af ne层的输入X是以单个数据为对象的。现在我们考虑N个数据一起进行正向传播的情况,也就是批版本的Affine层。

 

 

 

 

1.3 Softmax-with-Loss层

softmax函数会将输入值正规化之后再输出。比如手写数字识别时, Softmax层的输出如图所示。

 注:神经网络中进行的处理有推理inference)和学习两个阶段。神经网络的推理通常不使用Softmax层。比如,用图5-28的网络进行推理时,会将最后一个Affine层的输出作为识别结果。神经网络中未被正规化的输出结果(上图中 Softmax 层前面的 Affine 层的输出)有时被称为得分。也就是说,当神经网络的推理只需要给出一个答案的情况下,因为此时只对得分最大值感兴趣,所以不需要Softmax层。不过,神经网络的学习阶段则需要Softmax层。

下面来实现Softmax层。考虑到这里也包含作为损失函数的交叉熵误差( cross entropy error),所以称为 Softmax-with-Loss Softmax-withLoss层( Softmax函数和交叉熵误差的计算图如下图所示。

注意:交叉熵函数中的log是默认以e为底的。

 

计算图简化版:

 

softmax函数记为Softmax层,交叉熵误差记为Cross Entropy Error层。这里假设要进行3类分类,从前面的层接收3个输入(得分)。如图5-30所示, Softmax层将输入( a1, a2, a3)正规化,输出( y1,y2, y3)。 Cross Entropy Error层接收Softmax的输出( y1, y2, y3)和教师标签( t1,t2, t3),从这些数据中输出损失L

Softmax层的反向传播得到了( y1 - t1, y2 - t2, y3 - t3)这样漂亮的结果。由于( y1, y2, y3)是Softmax层的输出,( t1, t2, t3)是监督数据,所以( y1 - t1, y2 - t2, y3 - t3)是Softmax层的输出和教师标签的差分。神经网络的反向传播会把这个差分表示的误差传递给前面的层,这是神经网络学习中的重要性质。

注:使用交叉熵误差作为 softmax 函数的损失函数后,反向传播得到( y1 - t1, y2 - t2, y3 - t3)这样漂亮的结果。实际上,这样漂亮”  的结果并不是偶然的,而是为了得到这样的结果,特意设计了交叉熵误差函数。回归问题中输出层使用恒等函数,损失函数使用平方和误差,也是出于同样的理由(3.5节)。也就是说,使用平方和误差作为恒等函数的损失函数,反向传播才能得到( y1 -t1, y2 - t2, y3 - t3)这样漂亮的结果。

softmax-with-Loss层的代码实现:

请注意反向传播时,将要传播的值除以批的大小( batch_size)后,传递给前面的层的是单个数据的误差。

如果内容对你有帮助,感谢点赞+关注哦!

更多干货内容持续更新中…

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

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

相关文章

MySQL 进阶篇1.0 索引 SQL优化 视图 锁

01-课程介绍 02-存储引擎-MySQL体系结构 03存储引擎-简介 查询建表语句 --默认存储引擎:InnoDBshow create table account; 查询当前数据库支持的存储引擎show engines; 04存储引擎-InnoDB介绍 开关为"ON": 表示每个innodb引擎的表都有一个idb表共享文件 …

Focal Self-attention for Local-Global Interactions in Vision Transformers

目录 Abstract 1. Introduction 2. MEthod 2.1 Model architecture 2.2 Focal self-attention 2.2.1 Window-wise attention 2.2.2 Complexity analysis 2.3 Model configuration 3. Related work 4. Experiments 4.1 Image classification on ImageNet-1K 4.…

26. [Python GUI] PyQt5中拖放详解之拖放动作

PyQt5的拖放动作 1. 什么是拖放动作 拖放动作是指用户希望怎样处理拖放的数据,比如移动、复制、还是创建由目标到源的链 接等。 拖放动作由 Qt::DropAction 枚举描述: 2. 可能的拖放动作,实际的拖放动作,建议的拖放动作 可能的…

有什么制作网页的工具软件好用呢?

我们进行制作网页之前,都会找一些制作网页的工具软件,俗语有说“工欲善其事,必先利其器,所以找一款好的的工具软件可以对制作网页的过程提供很大帮助。那么有什么制作网页的工具软件呢? 制作网页的方式有哪些&#xff…

如何计算神经网络参数的个数?

目录 1. 卷积层 2. 分类层 3. 计算 LeNet 网络的参数个数 神经网络随着层数的加深,网络参数的个数会越来越多,小的网络有成千上万个参数,大的可以达到千万个网络参数。 所以应该如何计算神经网络参数的个数? 图像分类的神经网…

分享五款没什么名气却意外好用的软件

噔噔噔噔,作为一个黑科技软件爱好者,电脑里肯定是不会缺少这方面的东西,今天的5款优质软件闪亮登场了。 1.密码管理工具——RoboForm 这是一款密码管理的小插件,相信很多人都曾被各种各样的密码记忆弄得心力交瘁过,尤…

全国公务员考试:行测篇01《资料分析》

文章目录导读一、统计术语1.1、基期和现期1.2、增长量1.3、增长率1.4、例题1.5、年均增长量1.6、年均增长率1.7、同比和环比1.8、比重1.9、倍数1.10、平均数1.11、百分数1.12、成数1.13、翻番1.14、顺差和逆差1.15、GDP1.16、三大产业1.17、恩格尔系数和基尼系数1.18、五年计划…

【吴恩达机器学习笔记】六、过拟合及正则化

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为学习吴恩达机器学习视频的同学提供的随堂笔记。 📚专栏简介:在这个专栏,我将整理吴恩达机器学习视频的所有内容的笔记&…

JSON Web Token

目录1. 概念1. JWT 概述2. session认证流程2. JWT认证流程2. 使用JWT1. 获取令牌2. 验证令牌3. 封装工具类3. Springboot整合JWT1. 项目搭建2. 使用JWT3. 优化代码1. 概念 1. JWT 概述 JWT: 概念: 通过 JSON 形式作为 Web 应用中的令牌,用于…

[附源码]计算机毕业设计springboot贷款申请审核管理系统论文

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

「Vue3」手把手教你使用 Vite 快速搭建项目

本项目选型默认使用vue3 typescript vite 1. 使用vite初始化项目 vite创建地址,创建完成后有一个基本的项目结构了,如下图 2. 配置vite.config.ts,配置详解 import { defineConfig } from viteimport path from path;import vue from …

【PS-6】视图操作

目录 旋转视图工具 选项栏中的“滚动所有窗口 用【空格键】移动视图 将图片放大缩小的方法 1、缩放工具 2、通过鼠标右键对画面进行放大或缩小 3、【细微缩放】按钮 4、通过【CTRL /-】放大缩小 5、窗口→导航器 旋转视图工具 此工具常用于与数位板的结合使用 位置&…

北大惠普金融指数-匹配企业绿色创新指数2011-2020年:企业名称、年份、行业分类等多指标数据

1、数据来源:北京大学数字金融中心、国家统计局、国家专利产权局等部门公开数据 2、时间跨度:2011-2020年 3、区域范围:全国 4、指标说明: 中国内地31个省(直辖市、自治区,简称“省”)、337…

Rust机器学习之Linfa

Rust机器学习之Linfa 众所周知,Python之所以能成为机器学习的首选语言,与其丰富易用的库有很大关系。某种程度上可以说是诸如numpy、pandas、scikit-learn、matplotlib、pytorch、networks…等一系列科学计算和机器学习库成就了Python今天编程语言霸主的…

【MAX7800实现KWS20 demo演示】

【MAX7800实现KWS20 demo演示】1. 概述2. 关键字定位演示2.1 构建固件:2.2 选择板卡2.3 MAX78000 EVKIT2.3.1 MAX78000 EVKIT下载程序2.3.2 MAX78000 EVKIT 跳线设置2.3.3 MAX78000 EVKIT 操作2.4 MAX78000 Feather2.4.1 MAX78000 Feather羽毛板下载固件2.4.2 MAX78…

IBM MQ MQCSP

一,概念 1.1 用途 用途:MQCSP 结构使授权服务能够验证用户 ID 和密码。您在 MQCONNX 调用上指定 MQCSP 连接安全参数结构。 警告:在某些情况下,客户端应用程序的 MQCSP 结构中的密码将以纯文本形式通过网络发送。要确保客户端应…

【学习笔记58】JavaScript面向对象

一、认识面向对象 (一)面向过程编程 按照程序执行的过程一步一步的完成程序代码 (二)面向对象编程 面向对象编程是一种编程的方式/模式官方:对一类具有相同属性和功能的程序代码抽象的描述,实现代码编程…

Triangle Attack: A Query-efficient Decision-based Adversarial Attack

Triangle Attack: A Query-efficient Decision-based Adversarial Attack 三角攻击:一种查询高效的基于决策的对抗性攻击 Abstract 基于决策的攻击对实际应用程序构成了严重的威胁,因为它将目标模型视为一个黑箱,只访问硬预测标签。最近已经做出了很大…

【计组】指令和运算1--《深入浅出计算机组成原理》(二)

一、计算机指令 1、指令 从软件工程师的角度来讲,CPU就是一个执行各种计算机指令(Instruction Code)的逻辑.。 这里的计算机指令,也可以叫做机器语言。 不同发CPU支持的机器语言不同,如个人电脑用的是Intel的CPU&a…

同样Java后端开发三年,朋友已经涨薪到了30k,而我才刚到12K。必须承认多背背八股文确实有奇效!

程序猿在世人眼里已经成为高薪、为人忠诚的代名词。 然而,小编要说的是,不是所有的程序员工资都是一样的。 世人所不知的是同为程序猿,薪资的差别还是很大的。 众所周知,目前互联网行业是众多行业中薪资待遇最好的,…