深度学习-11-可变长参数

深度学习-11-可变长参数

本文是《深度学习入门2-自製框架》 的学习笔记,记录自己学习心得,以及对重点知识的理解。如果内容对你有帮助,请支持正版,去购买正版书籍,支持正版书籍不仅是尊重作者的辛勤劳动,也是鼓励更多优秀作品问世。

当前笔记内容主要为:步骤 11 可变长参数 章节的相关理解。

书籍总共分为5个阶段,每个阶段分很多步骤,最终是一步一步实现一个深度学习框架。例如前两个阶段为:

第 1 阶段共包括 10 个步骤 。 在这个阶段,将创建自动微分的机制
第 2 阶段,从步骤11-24,该阶段的主要目标是扩展当前的 DeZero ,使它能够执行更复杂的计算 ,使它能 够处理接收多个输入的函数和返回多个输出的函数

1.修改Function 类

我们之前的框架代码,都是支持一个参数 例如 y=square(x) y = exp(x) 但是现实中,我们的函数可能是多元函数,我们在大学里面也学习过多元函数的微积分,那么如何让我们的框架支持多元参数输入呢?


用列表来实现多元参数。
现在修改 Function 类以支持多个输入输出 。 为此,我们考虑将变量放 入一个列表(或元组)中进行处理 。

修改Function 里面的__call__方法:

class Function:def __call__(self, inputs):#x = input.dataxs = [x.data for x in inputs]  #列表生成式写法创建新的列表ys = self.forward(xs)outputs = [Variable(as_array(y)) for y in ys]  # 转成 ndarray 类型for output in outputs:output.set_creator(self)self.inputs = inputsself.outputs = outputs # 保存输出者。我是创造者的信息,这是动态建立 "连接"这 一 机制的核心return outputs

注意点


xs = [x.data for x in inputs]        # 列表生成式写法创建新的列表

2.Add类的实现

定义一个支持多个参数的Add 类:

class Add(Function) :def forward(self, xs):x0, x1 = xsy = x0+ x1return (y,)  # 注意写法

执行测试:

if __name__ == '__main__':xs = [Variable(np.array(2)), Variable(np.array(3))]f = Add()ys = f(xs)y = ys[0]print(y.data)


输出结果:

5

3.全部代码
'''
step09.py
优化-可变长参数(正向传播)
'''import numpy as np
import unittestclass 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()x, y = f.input, f.outputx.grad = f.backward(y.grad)if x.creator is not None:funcs.append(x.creator)class Function:def __call__(self, inputs):#x = input.dataxs = [x.data for x in inputs]  #列表生成式写法创建新的列表ys = self.forward(xs)outputs = [Variable(as_array(y)) for y in ys]  # 转成 ndarray 类型for output in outputs:output.set_creator(self)self.inputs = inputsself.outputs = outputs # 保存输出者。我是创造者的信息,这是动态建立 "连接"这 一 机制的核心return outputsdef forward(self, xs):raise NotImplementedError()  # 使用Function  这个方法forward 方法的人 , 这个方法应该通过继承采实现def backward(self, gys):raise NotImplementedError()class Add(Function) :def forward(self, xs):x0, x1 = xsy = x0+ x1return y, #return (y,)  # 注意写法,或者:return y, 返回一个元组 class Square(Function):def forward(self, x):y = x ** 2return ydef backward(self, gy):x = self.input.datagx = 2 * x * gy  # 方法的参数 gy 是 一个 ndarray 实例 , 它是从输出传播而来的导数 。return gxclass Exp(Function):def forward(self, x):y = np.exp(x)return ydef backward(self, gy):x = self.input.datagx = np.exp(x) * gyreturn gxdef square(x):f = Square()return f(x)def exp(x):f = Exp()return f(x)def as_array(x):  # 新增if np.isscalar(x):  # 使用 np.isscalar 函数来检查 numpy.float64 等属于标量return np.array(x)return x# 求导公式计算任意函数倒数
def numberical_diff(f, x, eps= 13-4) :x0= Variable(x.data -eps)x1 = Variable(x.data + eps)y0 = f(x0)y1 = f(x1)return (y1.data -y0.data) /(2*eps)if __name__ == '__main__':xs = [Variable(np.array(2)), Variable(np.array(3))]f = Add()ys = f(xs)y = ys[0]print(y.data)
4.总结

这一节比较简单,简述了如何支持多个参数的函数支持,如何使用列表生成式写法创建新的列表 ,如何返回一个列表


    

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

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

相关文章

Linux 命令 `db_upgrade` 详解与实战

标题:Linux 命令 db_upgrade 详解与实战 在 Linux 系统中,db_upgrade 并不是一个标准的系统命令或广泛认知的数据库升级工具。但在很多自定义的数据库管理系统或应用中,你可能会遇到这样的命令或脚本,用于升级数据库的结构、数据…

数字人实战第一天——最新数字人MuseTalk效果展示

最新数字人MuseTalk效果展示 MuseTalk 是由腾讯团队开发的先进技术,项目地址:GitHub - TMElyralab/MuseTalk: MuseTalk: Real-Time High Quality Lip Synchorization with Latent Space Inpainting,它是一个实时的音频驱动唇部同步模型。该模…

简单通用的系统安装、备份、还原方法,支持 ARM 系统【Ventory+FirePE+DiskGenius】

文章目录 0. 简介1. 制作 Ventory 启动盘1.1. 下载 Ventory1.2. 制作 Ventory 启动盘 2. 添加 FirePE 等系统镜像到启动盘2.1. 下载 FirePE2.2. 导出 .iso 系统镜像文件2.3. .iso 系统镜像文件添加至启动盘 3. 启动 FirePE 等系统镜像3.1. 在 bios 中选择启动盘启动3.2. 启动系…

访问网站时IP被阻止?原因及解决方法

在互联网上,用户可能会面临一个令人困扰的问题——当尝试访问某个特定的网站时,却发现自己的IP地址被该网站屏蔽。 IP地址被网站屏蔽是一个相对常见的现象,而导致这种情况的原因多种多样,包括恶意行为、违规访问等。本文将解释IP地…

4. JavaScript 循环与迭代

JavaScript 中提供了这些循环语句&#xff1a; for 语句do … while 语句while 语句label 语句 跳出多级循环 var num 0; outPoint: for (var i 0; i < 10; i) {for (var j 0; j < 10; j) {if (i 5 && j 5) {break outPoint; // 在 i 5&#xff0c;j 5 …

大学搜题软件网课?推荐五个搜题软件和学习工具 #其他#经验分享#知识分享

大学生活中&#xff0c;选择适合自己的学习工具能够提高学习效率&#xff0c;让学习更加轻松愉快。 1.彩虹搜题 这个是公众号 提供了各大教材以及网课平台的练习题答案&#xff0c;强大的平台支持&#xff0c;无论是智慧树还是MOOC&#xff0c;只有老师们用不到&#xff0c;…

理解JVM内存模型与Java内存模型(JMM)

理解JVM内存模型与Java内存模型&#xff08;JMM&#xff09; 在Java程序的运行过程中&#xff0c;内存管理和线程的同步是两个重要的概念。本文将深入探讨JVM内存模型&#xff08;Java Virtual Machine Memory Model&#xff09;和JMM&#xff08;Java Memory Model&#xff0…

实现开源可商用的 ChatPDF RAG:密集向量检索(R)+上下文学习(AG)

实现 ChatPDF & RAG&#xff1a;密集向量检索&#xff08;R&#xff09;上下文学习&#xff08;AG&#xff09; RAG 是啥&#xff1f;实现 ChatPDF怎么优化 RAG&#xff1f; RAG 是啥&#xff1f; RAG 是检索增强生成的缩写&#xff0c;是一种结合了信息检索技术与语言生成…

型号FM152A,FM148R和利时

型号FM152A,FM148R和利时。控制系统的仿真,综合考虑多方面的因素,本文将用MCGS组态软件设计一个仿真实验监控平台来对其进行实时控制.&#xff0c;完成仿真实验监控平台的设计,型号FM152A,FM148R和利时。最终达到对水箱液位实时监控,实验数据采集,报表的输出和数据的同步显示MC…

TS的高级类型

1.索引类型 学习索引类型 首先要了解keyof(索引查询) Tk 和泛型约束 1.keyof索引查询 就是用来获取某个类型的所有键(键值对的那个键). interface IPerson {name: string;age: number; }type Test keyof IPerson; //name|"age"这就相当于获得了IPerson里面的键也就…

Redis集群搭建(Linux)

安装Redis tar -xzvf redis-6.2.14.tar.gz下载redis wget https://download.redis.io/releases/redis-6.2.14.tar.gz创建目录 cd /home/jnredis mkdir redis 把redis-6.2.14.tar.gz移入/home/jnredis/redis目录下 解压 tar -xzvf redis-6.2.14.tar.gz编译安装 cd redis-…

Live800:深度解析,客户服务如何塑造品牌形象

在当今竞争激烈的市场环境中&#xff0c;品牌形象对于企业的成功至关重要。而客户服务作为品牌与消费者之间最直接的互动方式&#xff0c;不仅影响着消费者的购买决策&#xff0c;更在塑造品牌形象方面发挥着不可替代的作用。本文将深度解析客户服务如何塑造品牌形象&#xff0…

C++协程

什么是协程 协程&#xff08;Coroutine&#xff09;是程序组件&#xff0c;可以在执行过程中暂停并在稍后继续执行。与传统的子例程&#xff08;如函数或过程&#xff09;不同&#xff0c;子例程一旦调用&#xff0c;必须等其返回后才能继续执行调用它的代码。协程则可以在执行…

填充每个节点的下一个右侧节点指针-力扣

本题使用BFS对二叉树进行搜索&#xff0c;然后将每个节点的next指向右侧节点&#xff0c;当节点为一层的最后也给节点时&#xff0c;将其next指向nullptr。 /* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node* next;Node() : val(0), le…

【Unity3D小功能】Unity3D中UGUI-Text实现打字机效果

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群&#xff1a;398291828 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 需求要实现Text的打字机效果&#xff0c;一看居然…

机器学习作业6——svm支持向量机

目录 一、理论 概念&#xff1a; 线性可分&#xff1a; 支持向量&#xff1a; 间隔&#xff1a; 目标&#xff1a; 软间隔&#xff1a; 梯度下降法&#xff1a; 别的方法&#xff1a; 拉格朗日函数&#xff1a; SMO算法&#xff1a; 核函数&#xff1a; 二、代码 …

python代码中参数的默认值

python中的函数&#xff0c;可以给形参指定默认值。 带有默认值的参数&#xff0c;可以在调用的时候不传参。 如上图所示&#xff0c;在给函数设定形参的时候可以给函数形参设定默认值&#xff0c;当然默认参数的形参应该在非默认形参的后面。 如果在调用函数的时候&#xff…

Android输入法IME(三)之 管理端(IMMS)启动流程

2.2. IME管理端&#xff08;IMMS&#xff09;初始化流程 IMMS运行在system server进程中&#xff0c;属于系统服务的一部分&#xff0c;用于控制输入法的显示/隐藏、切换、绑定等操作。 涉及代码文件路径&#xff1a; IMMS运行在system server进程中&#xff0c;属于系统服务的…

Linux云计算架构师涨薪班就业服务有哪些?

学员一站式就业服务:一次学习&#xff0c;薪资翻倍 简历制作与指导 学员在培训期间&#xff0c;人才顾问会提供简历制作和指导服务&#xff0c;帮助学员制作出一份专业、有吸引力的简历。简历是求职者给招聘单位的第一印象&#xff0c;因此非常重要 模拟面试与技巧指导 为了让…

WebGPU 引领前端未来,互动渲染如何驱动小红书业务增长?

在大前端时代&#xff0c;浏览器能力得到显著的增强&#xff0c;为前端开发带来了更多的可能性和挑战。作为一套全新的 Web API 标准&#xff0c;WebGPU 旨在提供高性能的 3D 图形和数据并行计算能力&#xff0c;其在游戏、虚拟现实、机器学习等多个行业和应用场景中展现出潜力…