深度学习(斋藤)学习笔记(五)-反向传播2
上一篇关于反向传播的代码仅支持单变量的梯度计算,下面我们将扩展代码使其支持多个输入/输出。增加了对多输入函数(如 Add),以实现
的计算。
1.关于前向传播可变长参数的改进-修改Function类



修改方法:

Function用于对输入输出做规定,帮助实现右图的效果(接受inputs 返回outputs):




2.关于反向传播可变长参数的改进

修改函数类的反向传播

修改Variable类的反向传播
改进前:


获取y.creator,获取输入creator.inputs,根据y.grads计算x.grads:creator.backward(y.grads)
2.3两步的解包和打包操作:


最后修改square方法:


完整代码
import numpy as npclass Variable:def __init__(self, data):if data is not None:if not isinstance(data, np.ndarray):raise TypeError('{} is not supported'.format(type(data)))self.data = dataself.grad = Noneself.creator = Nonedef set_creator(self, func):self.creator = funcdef backward(self):if self.grad is None:self.grad = np.ones_like(self.data)funcs = [self.creator]while funcs:f = funcs.pop()gys = [output.grad for output in f.outputs] # 获取所有输出的梯度gxs = f.backward(*gys) # 调用 backward 方法if not isinstance(gxs, tuple): # 确保 gxs 是元组gxs = (gxs,)for x, gx in zip(f.inputs, gxs): # 为每个输入分配梯度x.grad = gxif x.creator is not None:funcs.append(x.creator)class Function:def __call__(self, *inputs):xs = [x.data for x in inputs] # 提取输入数据ys = self.forward(*xs) # 前向传播(解包)if not isinstance(ys, tuple): # 确保 ys 是元组ys = (ys,)outputs = [Variable(as_array(y)) for y in ys] # 创建输出变量for output in outputs:output.set_creator(self)self.inputs = inputs # 保存输入self.outputs = outputs # 保存输出return outputs if len(outputs) > 1 else outputs[0] # 根据输出数量返回def forward(self, *xs):raise NotImplementedError()def backward(self, *gys):raise NotImplementedError()# 实现具体的函数类
class Square(Function):def forward(self, x):return x ** 2def backward(self, gy):x = self.inputs[0].data # 从 inputs 中获取数据gx = 2 * x * gyreturn gxclass Add(Function):def forward(self, x0, x1):y = x0 + x1return ydef backward(self, gy):return gy, gy # 对两个输入返回相同的梯度# 定义便捷函数
def square(x):return Square()(x)def add(x0, x1):return Add()(x0, x1)# 定义 as_array 函数
def as_array(x):if np.isscalar(x):return np.array(x)return x# 测试代码
x = Variable(np.array(2.0))
y = Variable(np.array(3.0))
z = add(square(x), square(y))
z.backward()
print(z.data) # 输出结果: 13.0 (2^2 + 3^2 = 4 + 9 = 13)
print(x.grad) # 输出梯度: 4.0 (dz/dx = 2 * 2 = 4)
print(y.grad) # 输出梯度: 6.0 (dz/dy = 2 * 3 = 6)
运行结果:


相关文章:
深度学习(斋藤)学习笔记(五)-反向传播2
上一篇关于反向传播的代码仅支持单变量的梯度计算,下面我们将扩展代码使其支持多个输入/输出。增加了对多输入函数(如 Add),以实现的计算。 1.关于前向传播可变长参数的改进-修改Function类 修改方法: Function用于对…...
数据库基础练习1
目录 1.创建数据库和表 2.插入数据 创建一个数据库,在数据库种创建一张叫heros的表,在表中插入几个四大名著的角色: 1.创建数据库和表 #创建表 CREATE DATABASE db_test;#查看创建的数据库 show databases; #使用db_test数据库 USE db_te…...
TypeError: Cannot create property ‘xxx‘ on string ‘xxx‘
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
极狐GitLab 17.9 正式发布,40+ DevSecOps 重点功能解读【三】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
lsblk命令linux查询设备信息
lsblk命令是Linux中用于列出所有可用块设备信息的工具,它能够显示设备之间的依赖关系,但不会列出RAM盘的信息。块设备包括硬盘、闪存盘、CD-ROM等。lsblk命令包含在util-linux包中,该命令的常用参数包括: -d:仅列出磁盘…...
【智能体架构:Agent】LangChain智能体类型ReAct、Self-ASK的区别
1. 什么是智能体 将大语言模型作为一个推理引擎。给定一个任务, 智能体自动生成完成任务所需步骤, 执行相应动作(例如选择并调用工具), 直到任务完成。 2. 先定义工具:Tools 可以是一个函数或三方 API也…...
鸿蒙开发:弹性布局Flex
前言 代码案例基于Api13。 正在开发一个搜索组件,其中一个功能是针对历史搜索的内容进行展示,由于搜索的内容长度不一,需要进行流式布局展示,效果如下: 以上的效果,相信大家在很多的应用里或多或少都见到过…...
【DeepSeek】5分钟快速实现本地化部署教程
一、快捷部署 (1)下载ds大模型安装助手,下载后直接点击快速安装即可。 https://file-cdn-deepseek.fanqiesoft.cn/deepseek/deepseek_28348_st.exe (2)打开软件,点击立即激活 (3)选…...
易基因特异性R-loop检测整体研究方案
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 01.技术简述 R-loop是由DNA:RNA 杂交体和被置换的单链DNA组成的三链核酸结构,广泛参与基因转录、表观遗传调控及DNA修复等关键生物学过程。异常的R-loop积累会导致基因组不稳…...
虚拟系统配置案例
安全策略要求: 1、只存在一个公网IP地址,公司内网所有部门都需要借用同一个接口访问外网 2、财务部禁止访问Internet,研发部门只有部分员工可以访问Internet,行政部门全部可以访问互联网 3、为三个部门的虚拟系统分配相同的资源类…...
C语言【进阶篇】之结构体 —— 从基础声明到复杂应用的进阶之路
目录 🚀前言✍️结构体类型的声明💯结构体定义💯结构的特殊声明 🦜结构的自引用💻结构体内存对齐💯对齐规则💯为什么存在内存对齐💯修改默认对齐数 🐍结构体传参…...
Python-列表和元组
列表 列表是什么, 元组是什么 编程中, 经常需要使用变量, 来保存/表示数据. 如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可. 但是有的时候, 代码中需要表示的数据特别多, 甚至也不知道要表示多少个数据. 这个时候, 就需要用到列表. 列表是一种让程序猿在代…...
PyTorch 中的混合精度训练方法,从 autocast 到 GradScalar
PyTorch 的混合精度训练主要由两个方法实现:amp.autocast 和 amp.GradScalar。在这两个工具的帮助下,可以实现以 torch.float16 的混合精度训练。当然,这两个方法都是模块化并且通常都会一起调用,但并不一定总是需要一起使用。 参…...
分享能在线运行C语言的网站
https://www.onlinegdb.com/# 我用vscode运行c语言总是报错,后面找到这个网站,可以在线调试和保存代码。 如下图,程序的效果是给变量x,y,z赋值,并打印出来。代码输入以后,右上角选择C语言&…...
AI-Deepseek + PPT
01--Deepseek提问 首先去Deepseek问一个问题: Deepseek的回答: 在汽车CAN总线通信中,DBC文件里的信号处理(如初始值、系数、偏移)主要是为了 将原始二进制数据转换为实际物理值,确保不同电子控制单元&…...
MacOS Big Sur 11 新机安装brew wget python3.12 exo
MacOS Big Sur 11,算是很老的系统了,所以装起来有点费劲。 首先安装brew 按照官网的方法,直接执行下面语句即可安装: export HOMEBREW_BREW_GIT_REMOTE"https://githubfast.com" # put your Git mirror of Homebrew/brew here …...
十大经典排序算法简介
一 概述 本文对十大经典排序算法做简要的总结(按常用分类方式排列),包含核心思想、时间/空间复杂度及特点。 二、比较类排序 1. 冒泡排序 (BUBBLE SORT) 思想:重复交换相邻逆序元素,像气泡上浮 复杂度: 时间:O(n^2)(最好情况O(n)) 空间:O(1) 特点:简单但效率低,稳…...
不小心更改了/etc权限为777导致sudo,ssh等软件都无法使用
修复流程 一、进入恢复模式(无网络或无法登录时必选) 1.重启系统,在 GRUB 启动菜单选择 Recovery Mode(按 Shift 或 Esc 呼出菜单)。2.以 root 身份挂载为可读写: bash 复制 mount -o remount,rw /确保文…...
AI档案审核2
以下是一个结合计算机视觉(CV)和自然语言处理(NLP)的智能档案审核系统完整实现方案,包含可落地的代码框架和技术路线: 一、系统架构设计 #mermaid-svg-UhBtIPrNXo5P89Zb {font-family:"trebuchet ms&q…...
【基础1】冒泡排序
核心思想 冒泡排序是通过相邻元素的连续比较和交换,使得较大的元素逐渐"浮"到数组的末尾,如同水中气泡上浮的过程 特点: 每轮遍历将最大的未排序元素移动到正确位置稳定排序:相等元素的相对位置保持不变原地排序…...
ROFL-Player:英雄联盟回放时光机,一键穿越所有版本
ROFL-Player:英雄联盟回放时光机,一键穿越所有版本 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为英雄联…...
RL78/G13单片机定时器外部事件捕获与中断控制LED实践
1. 项目概述与核心思路最近在折腾瑞萨的RL78/G13系列单片机,手头正好有块开发板,就想用它来实现一个基础的定时器功能。这听起来是个老生常谈的话题,但实际动手时,你会发现从选型、配置到调试,每一步都有不少细节值得琢…...
别再只盯着M.2了!手把手教你玩转Mini PCIe接口,给老旧笔记本/工控设备加装4G模块和固态硬盘
别再只盯着M.2了!手把手教你玩转Mini PCIe接口,给老旧笔记本/工控设备加装4G模块和固态硬盘 当大家都在追逐M.2 NVMe固态硬盘的速度时,一个被忽视的接口正在老旧设备里"沉睡"——那就是Mini PCIe。这个藏在笔记本电脑无线网卡下方或…...
僧伽罗文语音本地化迫在眉睫!斯里兰卡新《数字服务法》2024年10月生效前,你必须掌握的7项ElevenLabs合规配置
更多请点击: https://intelliparadigm.com 第一章:僧伽罗文语音本地化的法律动因与技术紧迫性 斯里兰卡《官方语言法》(No. 33 of 1956)及2023年修订的《国家数字包容战略》明确要求:所有面向公众的政府数字服务必须支…...
画图工具2.0
在上篇文章中,我们已经对简易画图工具有了一个初步了解,下面我们要对一些具体细节进行完善并加上一些新的功能,我们直接来看升级点:1.界面类加上颜色按钮Color[] colors {Color.BLACK, Color.RED, Color.GREEN, Color.BLUE, Colo…...
智能硬件开发实战:从核心架构到产品落地的全流程解析
1. 智能硬件:从概念到现实的产业全景透视提起“智能硬件”,很多朋友可能觉得这是个离自己生活有点距离的高科技词汇。但如果说“智能手机”,那几乎无人不知,无人不晓。其实,智能硬件和智能手机在本质上是一脉相承的&am…...
STM32单片机如何用IRIG-B解码模块实现10ns级高精度授时(附完整驱动代码)
STM32单片机如何用IRIG-B解码模块实现10ns级高精度授时(附完整驱动代码) 在工业自动化、电力系统同步、通信基站等对时间精度要求苛刻的领域,微秒级甚至毫秒级的时钟同步已经无法满足需求。IRIG-B作为一种标准时间码格式,通过解码…...
Verilog时钟分频:从原理到工程实践,避坑指南与最佳方案
1. 项目概述:为什么时钟分频是数字设计的基石在数字电路和FPGA设计里,时钟信号就像是整个系统的心跳。它驱动着寄存器、状态机和数据流,确保所有操作在正确的节拍下同步进行。但现实情况是,我们手头的时钟源往往只有一个固定的频率…...
PXIe-9150嵌入式控制器:构建高集成度自动化测试系统的核心
1. 项目概述:从一块板卡到一套系统最近在整理实验室的测试设备,翻出来几台老旧的PXI机箱,想着怎么把它们重新利用起来。正好手头有个新项目,需要搭建一套多通道、高精度的数据采集与实时处理系统,传统的工控机加板卡的…...
瑞为技术获IPO备案:年营收4.4亿 亏损6815万
雷递网 雷建平 5月15日厦门瑞为信息技术股份有限公司(简称“瑞为技术”)日前获IPO备案,拿到了上市钥匙。与瑞为技术一同拿到上市备案的公司还有上海仙工智能科技股份有限公司、江西齐云山食品股份有限公司、广东鼎泰高科技术股份有限公司。年…...
