深度学习-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 箱子变量类型。

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

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值