【一起撸个DL框架】3 前向传播

这篇具有很好参考价值的文章主要介绍了【一起撸个DL框架】3 前向传播。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • CSDN个人主页:清风莫追
  • 欢迎关注本专栏:《一起撸个DL框架》
  • GitHub获取源码:https://github.com/flying-forever/OurDL
  • blibli视频合集:https://space.bilibili.com/3493285974772098/channel/series

3 前向传播🥝

3.1 前情提要

上一篇:【一起撸个DL框架】2 节点与计算图的搭建

在上一节中,我们定义了加法节点和变量节点类,搭建计算图并实现了加法功能。但还有一个小问题,那就是节点类的定义中,只有父节点有值时,才能调用compute()方法计算本节点的值。而当存在多个节点串联时,就无法直接调用结果节点的compute()方法。因此,这一节我们将采用递归来解决这个问题。

【一起撸个DL框架】3 前向传播
图1:串联的两个加法节点

3.2 前向传播:递归的forward方法

我们只需要修改Node类,在其中添加一个forword()方法。当父节点的值为空时,递归地调用forward()计算节点的值,然后再调用compute()计算本节点的值。

class Node:
    def __init__(self, parent1=None, parent2=None) -> None:
        self.parent1 = parent1
        self.parent2 = parent2
        self.value = None
    def set_value(self, value):
        self.value = value
    def compute(self):
        pass
    def forward(self):
        for parent in [self.parent1, self.parent2]:
            if parent.value is None:
                parent.forward()
        self.compute()
        return self.value

然后,我们就可以使用修改过的节点类,搭建出图1中的计算图,并计算节点add2的值。

if __name__ == '__main__':

    # 搭建计算图
    x1 = Varrible()
    x2 = Varrible()
    add1 = Add(x1, x2)
    x3 = Varrible()
    add2 = Add(add1, x3)
    
    # 输入
    x1.set_value(int(input('请输入x1:')))
    x2.set_value(int(input('请输入x2:')))
    x3.set_value(int(input('请输入x3:')))

    # 前向传播
    y = add2.forward()
    print(y)

运行代码效果如下:

请输入x1:1
请输入x2:2
请输入x3:3
6

3.3 再添乘法节点:搭建函数y=2x+1

函数 y = 2 x + 1 y=2x+1 y=2x+1的计算图如图2所示,与图1很相似,只是其中一个加法节点换成了乘法节点。但不同之处是,在函数 y = 2 x + 1 y=2x+1 y=2x+1的计算图中,只有x一个自变量,其余变量节点称为参数

【一起撸个DL框架】3 前向传播
图2:函数y=2x+1的计算图

乘法节点类的实现与加法节点差不多,如下所示:

class Mul(Node):
    def __init__(self, parent1=None, parent2=None) -> None:
        super().__init__(parent1, parent2)
    def compute(self):
        self.value = self.parent1.value * self.parent2.value

下面是图2中计算图的搭建:

if __name__ == '__main__':

    # 搭建计算图
    w = Varrible()
    x = Varrible()
    mul = Mul(w, x)
    b = Varrible()
    add = Add(mul, b)
    
    # 输入
    w.set_value(2)
    b.set_value(1)
    x.set_value(int(input('请输入x:')))

    # 前向传播
    y = add.forward()
    print(y)
请输入x:2
5

3.4 小结

这一节的内容比较简单,我们用递归实现了前向传播,并搭建了一个一次函数: y = 2 x + 1 y=2x+1 y=2x+1


下一篇:【一起撸个DL框架】4 反向传播求梯度文章来源地址https://www.toymoban.com/news/detail-433337.html

到了这里,关于【一起撸个DL框架】3 前向传播的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【一起撸的DL框架】5 实现:自适应线性单元

    CSDN个人主页:清风莫追 欢迎关注本专栏:《一起撸个DL框架》 GitHub获取源码:https://github.com/flying-forever/OurDL blibli视频合集:https://space.bilibili.com/3493285974772098/channel/series 上一篇:【一起撸个DL框架】4 反向传播求梯度 上一节我们实现了计算图的反向传播,可以求结果节点关于

    2024年02月02日
    浏览(37)
  • pytorch 前向传播与反向传播代码+ fp16

    optim.zero_grad() : 将模型的梯度参数设置为0,即清空之前计算的梯度值,在训练模型过程中,每次模型反向传播完成后,梯度都会累加到之前的梯度值上,如果不清空,这些过时的梯度将会影响下一次迭代的结果。因此,使用 optim.zero_grad() 来清空梯度避免这种情况的发生。保证

    2024年02月05日
    浏览(45)
  • GAN:对抗生成网络,前向传播和后巷传播的区别

    目录 GAN:对抗生成网络 损失函数 判别器开始波动很大,先调整判别器  生成样本和真实样本的统一:真假难辨​编辑  文字专图片​编辑  头像转表情包​编辑  头像转3D​编辑 后向传播 1. 前向传播(forward) 2. 反向传播(backward):得到权重参数公式,寻找优路径 反向传

    2024年02月12日
    浏览(45)
  • 【机器学习300问】71、神经网络中前向传播和反向传播是什么?

            我之前写了一篇有关计算图如何帮助人们理解反向传播的文章,那为什么我还要写这篇文章呢?是因为我又学习了一个新的方法来可视化前向传播和反向传播,我想把两种方法总结在一起,方便我自己后续的复习。对了顺便附上往期文章的链接方便回顾: 【机器

    2024年04月17日
    浏览(69)
  • 神经网络中,前向传播、反向传播、梯度下降和参数更新是怎么完成的

    神经网络中,前向传播、反向传播、梯度下降和参数更新是怎么完成的 在神经网络的训练过程中,前向传播、反向传播、梯度下降和参数更新是按照以下顺序完成的: 前向传播(Forward Propagation): 在前向传播阶段,输入样本通过神经网络的各个层,从输入层到输出层逐步进

    2024年02月16日
    浏览(45)
  • 【机器学习】P18 反向传播(导数、微积分、链式法则、前向传播、后向传播流程、神经网络)

    反向传播(back propagation)是一种用于训练神经网络的算法,其作用是计算神经网络中每个参数对损失函数的影响,从而进行参数更新,使得神经网络的预测结果更加准确。 具体来说,反向传播算法首先通过 前向传播 计算神经网络的预测结果,并与实际结果进行比较,得到

    2024年02月04日
    浏览(64)
  • 深度学习:神经网络的前向传播过程

    Author:龙箬 Computer Application Technology Change the World with Data and Artificial Intelligence ! CSDN@weixin_43975035 哲学与爱情是我永远都搞不懂的两件事情 注: 以三层神经网络为例说明神经网络的前向传播过程 激活函数采用 R e L U ReLU R e LU 函数 w w w 值和 𝜃 值由反向传播过程确定,此处可忽

    2023年04月20日
    浏览(48)
  • 0基础入门---第3章---神经网络(前向传播)

    🌞欢迎来到深度学习的世界  🌈博客主页:卿云阁 💌欢迎关注🎉点赞👍收藏⭐️留言📝 🌟本文由卿云阁原创! 🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢! 目录 3.1 从感知机到神经网络 3.2 激活函数 3.3 多维数组的运算 3.4 3层神经网络的实现 3.5 输出

    2024年02月09日
    浏览(51)
  • 神经网络中的前向传播(Forward Propagation)和后向传播(Backward Propagation)

    有时候会搞混这两个概念。什么是前向传播?不是只有后向传播吗?后向传播好像是用来更新模型参数的,前向传播是什么东西? 带着疑问再次梳理一遍: 前向传播是神经网络进行预测的过程。在这个过程中,输入数据沿着神经网络从输入层经过隐藏层(如果有的话)最终

    2024年02月20日
    浏览(49)
  • 【人工智能】神经网络、前向传播、反向传播、梯度下降、局部最小值、多层前馈网络、缓解过拟合的策略

    前向传播 是指将输入数据从输入层开始经过一系列的权重矩阵和激活函数的计算后,最终得到输出结果的过程。在前向传播中,神经网络会将每一层的输出作为下一层的输入,直到输出层得到最终的结果。 反向传播 是指在神经网络训练过程中,通过计算损失函数的梯度,将

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包