深度学习-03-函数的连续调用


深度学习-03-函数的连续调用

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

        当前笔记内容主要为:步骤2 函数的连续调用 章节的相关理解。

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

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


1.Exp函数的实现


上面一节实现了初级版,和高阶版本的函数Function 的实现,这个版本我们继续实现一个新的函数,以及将多个函数连接起来进行计算。
首先实现一个新的函数  y = exp(x) 代码如下:

import numpy as np
from step01 import *
from step02 import *


class Exp(Function):
    def forward(self,x):
        return np.exp(x)

有了前面几节的学习,定义这个函数应该不太难。 

2.函数的连续调用

怎么让函数能够连续调用?我们回到我们的Function 类的定义,我们发现

import numpy as np
from step01 import *

class Function:
    def __call__(self, input):
        x = input.data
        y = self.forward(x)
        output = Variable(y)
        return output
    def forward(self, x):
        raise NotImplementedError()  #使用Function  这个方法forward 方法的人 , 这个方法应该通过继承采实现

我们的Function 在执行call 方法后,返回的都是我们的箱子变量 Variable 所以我们可以很容易的在多个函数将上一个
输出作为下一个函数的输入。这样就串起来了。

例如我们可以定义函数 y = (exp(x^2))^2 实现如下:

    A = Square()
    B = Exp()
    C = Square()

    x = Variable(np.array(0.5))
    a = A(x)
    b = B(a)
    y = C(b)


输出结果为:

1.648721270700128
3.项目代码
'''
step03.py
函数的连续调用

'''

import numpy as np
from step01 import *
from step02_1 import *


class Exp(Function):
    def forward(self,x):
        return np.exp(x)

if __name__ == '__main__':
    A = Square()
    B = Exp()
    C = Square()

    x = Variable(np.array(0.5))
    a = A(x)
    b = B(a)
    y = C(b)

    print(y.data)

'''
输出结果:
C:\Users\Administrator\AppData\Local\Programs\Python\Python39-32\python.exe D:/pyworkspace/dezero-01/step03.py
1.648721270700128

'''
4.总结


本节实现了函数的连续调用,能实现连续调用,得益于我们定义的Function 类输入输出参数都是Variable 箱子变量类型。

通过简单函数组合可以构成复合函数,有了复合函数,我们就可以执行复杂的计算。本节例子程序所描绘的多个函数的计算图如下所示。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

v-for中key的作用

v-for中key的作用 例如我们用v-for渲染一个列表[1, 2, 4 ,5],然后在中间插入一个3变成[1,2,3,4,5]。v-for写了key和没有写key,Vue是怎么处理的呢? Vue对有key的会调用patchKeyedChildren方法;没有key的调用patchUnkeyedChildren方…

领导力中的说服艺术

本文主要介绍了亚里士多德修辞三角理论,即演讲者在说服听众时如何运用品格(Ethos)、情感(Pathos)和逻辑(Logos)三种基本的修辞手法。原文: The Art of Persuasion in Leadership 亚里士多德的说…

autodl服务器中YOLOx训练自己数据集

目录 本篇文章主要讲解使用YOLOx训练自己数据集,其中包括数据集格式转换~ 目录 一、数据集处理二、环境配置三、配置文件修改四、开始训练五、开始验证 一、数据集处理 第一步:将yolo格式的数据集转换成VOC格式 转换脚本:txt_to_xml.py f…

备战十一届大唐杯国赛预选赛

这次省赛带了太多个省一了,具体可看下面的图片,只放了一部分。目前根据可靠消息,应该还有个预选赛和去年一样,就是还会考一次仿真。如果说通过了就是国二起步然后去北方工业争夺国一国二,没过的话就是国三。 每…

CCIG学术论坛|文档解析技术加速大模型训练与应用

目录 前言一、大模型训练和应用过程的关键环节面临的问题1、数据2、算力3、语料4、训练时间5、模型规模与复杂度6、部署和推理效率7、安全和隐私 二、高精准、高效率的文档解析三、文档解析技术难点四、TextIn文档解析1、算法Pipeline2、文档图像预处理算法效果3、版面分析算法…

海南省三支一扶报名照上传失败?别忘了这

一、海南三支一扶报名照上传失败的2个原因 1.未按要求使用浏览器:请使用IE浏览器(IE8以上版本)、Chrome(谷歌浏览器)或 Firefox(火狐)浏览器 来使用本系统,360浏览器等其他浏览器请使用极速模式…

python-最接近target的值

【问题描述】:给定一个数组,在数组中找到两个数,使它们的和最接近目标值的值但不超过目标值,然后返回它们的和。 【问题示例】:输入target15,array[1,3,5,11,7],输出14,31114。 完整代码如下: …

使用 Navicat 工具查看 SQLite 数据库中的 PNG 图片

Navicat 是一款功能强大的数据库管理工具,支持多种数据库类型,包括 SQLite。它提供了一个直观的用户界面,可以轻松查看、编辑和管理数据库数据。 SQLite 是一种轻量级的嵌入式数据库,常用于移动应用程序和小型项目。它支持存储各…

Pytest框架中的Setup和Teardown功能

在 pytest 测试框架中,setup 和 teardown是用于在每个测试函数之前和之后执行设置和清理的动作,而pytest 实际上并没有内置的 setup 和 teardown 函数,而是使用了一些装饰器或钩子函数来实现类似的功能。 学习目录 钩子函数(Hook…

JavaWeb笔记整理+图解——Listener监听器

欢迎大家来到这一篇章——Listener监听器 监听器和过滤器都是JavaWeb服务器三大组件(Servlet、监听器、过滤器)之一,他们对于Web开发起到了不可缺少的作用。 ps:想要补充Java知识的同学们可以移步我已经完结的JavaSE笔记&#x…

CTF本地靶场搭建——基于阿里云ACR实现动态flag题型的创建

接上文,这篇主要是结合阿里云ACR来实现动态flag题型的创建。 这里顺便也介绍一下阿里云的ACR服务。 阿里云容器镜像服务(简称 ACR)是面向容器镜像、Helm Chart 等符合 OCI 标准的云原生制品安全托管及高效分发平台。 ACR 支持全球同步加速、…

WPF Binding对象、数据校验、数据转换

在WinForm中,我们要想对控件赋值,需要在后台代码中拿到控件对象进行操作,这种赋值形式,从根本上是无法实现界面与逻辑分离的。 在WPF中,微软引入了Binding对象,通过Binding,我们可以直接将控件与…

MySQL 导出导入的101个坑

最近接到一个业务自行运维的MySQL库迁移至标准化环境的需求,库不大,迁移方式也很简单,由开发用myqldump导出数据、DBA导入,但迁移过程坎坷十足,记录一下遇到的各项报错及后续迁移注意事项。 一、 概要 空间问题源与目…

使用最小花费爬楼梯 | 动态规划

1.使用最小花费爬楼梯 题目连接:746. 使用最小花费爬楼梯 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开…

数据结构---时间复杂度与空间复杂度

文章目录 1. 知识背景2. 什么是时间复杂度?3. 空间复杂度4 .大O渐进表示法:对于一些算法的时间复杂度存在最好,最坏,平均的情况: 5. 常见的时间复杂度举例总结:6. 空间复杂度的举例与总结:总结&…

【HarmonyOS】List组件多层对象嵌套ForEach渲染更新的处理

【HarmonyOS】List组件多层对象嵌套ForEach渲染更新的处理 问题背景: 在鸿蒙中UI更新渲染的机制,与传统的Android IOS应用开发相比。开发会简单许多,开发效率提升显著。 一般传统应用开发的流程处理分为三步:1.画UI,…

三丰云评测:免费虚拟主机和免费云服务器体验

今天我来为大家分享一下我的三丰云评测体验。三丰云是一家提供免费虚拟主机和免费云服务器的服务商,为了方便大家了解他们的服务,我特地注册了他们的免费虚拟主机和免费云服务器进行试用。在实际体验中,我发现三丰云的服务表现非常出色。首先…

攻防世界---web---Web_php_unserialize

1、题目描述 2、 3、分析代码 class Demo { private $file fl4g.php; }:定义了一个名为Demo的类,该类有一个私有属性$file,默认值为fl4g.php。 $a serialize(new Demo);:创建了一个Demo类的实例,并对其进行序列化&a…

C++设计模式-状态模式

运行在VS2022,x86,Debug下。 28. 状态模式 状态模式让一个对象的行为随着内部状态的改变而改变,而该对象也像换了类一样。应用:如在游戏开发中,游戏有不同场景,如主菜单、开始、战斗等。可以使用状态模式&…

Debian系统磁盘挂载

服务器推荐:雨云 优惠码:zsj 用优惠码注册账户并绑定微信后可获取首月5折优惠券; 后续新购主机也可在积分商城中换取新购优惠券; 公测阶段的超大带宽服务器,由于是国内主机因此需要备案域名。 公测阶段价格尚未确定&am…