数值微分与计算图

news2024/9/21 14:44:25

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、使用数值微分计算导数
  • 二、计算图



提示:以下是本篇文章正文内容,下面案例可供参考

一、使用数值微分计算导数

假设函数是y = x ** 2,如何使用数值微分来计算y 在x = 3时的导师呢?

利用导数的定义
在这里插入图片描述
因为h不可能无限接近与0,所以取h = 0.0001

代码如下:

def numerical_diff(f,x):
    h = 1e-4
    return (f(x+h) - f(x-h)) / (2 * h)

def func(x):
    return np.sum(x**2)

在这里插入图片描述
运行结果很接近6。
如果输入的x是一维向量,不是一个值的话,代码如下

def numerical_gradient(f,x):
    h = 1e-4
    grad = np.zeros_like(x)
    for i in range(0,x.size):
        ##计算f(x+h)
        temp = x[i]
        x[i] = temp + h
        f_x_h1 = f(x)
        ##计算f(x-h)
        x[i] = temp - h
        f_x_h2 = f(x)

        grad[i] = (f_x_h1 - f_x_h2) / (2*h)
        x[i] = temp
    return grad
def gradient_desent(f,x,lr = 1e-1,step_num = 100):
    for i in range(100):
        grad = numerical_gradient(f,x)
        x = x - lr * grad
    return x    
print(gradient_desent(func,np.array([-3.0,4.0])))    

按照梯度下降的方法迭代100次,得到结果为
在这里插入图片描述
说明很接近0,已经收敛到了极小值。

如果说输入是一个多维度的数据,对应的数值微分代码还要更改。

二、计算图

在这里插入图片描述
针对这样一个问题,构建的计算图如下
在这里插入图片描述
该图中,只有正向传播(从左到右的计算过程),还没有反向传播的值。
计算图中只有加法和乘法两种节点。

使用计算图的优点如下
(1)无论全局是多么复杂的计算,都可以简化问题,然后计算简单的问题。
(2)利用计算图可以将中间的计算结果全部保存起来。
(3)可以通过反向传播高效的计算导数。

反向传播时,加法节点和乘法节点的反向传播如下
加法节点
在这里插入图片描述
乘法节点
在这里插入图片描述

在上面的例子中,加入反向传播之后的完整计算图如下
在这里插入图片描述

代码实现如下
乘法层

class MulLayer:
    def __init__(self):
        self.x = None
        self.y = None
        
    def forward(self,x,y):
        self.x = x
        self.y = y
        out = x * y
        
    def backword(self,dout):
        dx = dout * self.y
        dy = dout * self.x
        
        return dx,dy

加法层

class AddLayer:
    def __init__(self):
        self.x = None
        self.y = None

    def forward(self,x,y):
        self.x = x
        self.y = y
        out = x + y

    def backword(self,dout):
        dx = dout
        dy = dout

        return dx,dy

除此之外,包括relu,sigmoid,softmax层都应该包含前向传播和反向传播两个方法。


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

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

相关文章

探索Gradio库的Radio模块及其change、input和select方法

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

linux之复制文件(cp/tar/rsync/cpio)

复制文件 命令一: cp time cp -a /home/learn/files /home/learn/test/cp real 6m7.699s user 0m0.568s sys 0m48.372s命令二:tar time (cd /home/learn/files; tar c .) | (cd /home/learn/test/tar ; tar x) real 2m7.848s user 0m1.209s sys 1m12.82…

Nuxt3引入Element-plus和sass

1.引入Element-plus 打开编辑器终端 运行npm install element-plus/nuxt 或者命令行cd到项目文件 运行npm install element-plus/nuxt package.json文件会出现 使用Element-plus 在nuxt.config.ts文件添加代码 export default defineNuxtConfig({devtools: { enabled: true }…

Blender基础入门(2):Blender简单渲染

文章目录 我个人的Blender专栏前言渲染基本常识科普Blender渲染设置Blender窗口分栏分屏渲染 渲染设置GPU渲染引擎推荐最大采样 切换摄像机渲染图片渲染采样512和4096差异512采样4096采样 渲染建议 我个人的Blender专栏 Blender简单教学 前言 渲染是从白模到成品的过程&…

CTFSHOW 每周大挑战 RCE极限挑战

RCE挑战1 开题直接给了源码 过滤了括号和点号。 使用内敛绕过。 payload: codeecho tac /f1agaaa;RCE挑战2 源码直接给了。 基本把能用的都过滤了,只剩下$()_;[],./字符,自增RCE无疑。 //相当于 ($_GET[_])($_GET[__]) 使用的时候url编…

【雕爷学编程】Arduino动手做(156)---OTTO两足舵机机器人

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

【Mac】安装DbServer

1.下载 链接: https://pan.baidu.com/s/13Vzsv1sLAq-J8RsRgtL-pw 提取码: 8gsr 2.安装 如果提示已损坏,无法打开。 解决方式: 打开“终端”,输入命令:sudo spctl --master-disable,这个过程中会提示要输入密码&…

C++ 库 vector初始化方式

vector 支持多种初始化方式,以下是几种常见的方法: 1. 默认初始化: 可以使用无参构造函数来创建一个空的 vector。例如: 创建一个空的整数向量 2. 指定大小和初始值: 可以使用带有两个参数的构造函数来指定 vector 的大小和初始值。例如&am…

优化器学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、SGD(随机梯度下降算法)二、Momentum三、AdaGrad四、Adam算法 前言 最优化是应用数学的一个分支,主要研究在特地情况下函…

Installation request for phpoffice/phpspreadsheet

办法 composer update --ignore-platform-reqs

【C++】引用、指针、函数指针、指针函数

指针和引用的概念及区别 引用 引用是一个已存在对象的别名,使用 & 符号进行声明,例如 int& ref num;引用必须在声明时初始化,并且一旦绑定到一个对象后,就不能再重新绑定到其他对象引用使用起来类似于被引用对象的别名…

SpringBoot开启定时任务

有些场景需要使用到定时任务,比如: 定时数据备份:定时任务可以用于自动备份数据库或重要文件。可以编写一个定时任务来定期执行数据备份操作,以保护数据的安全性。 定时数据同步:在分布式系统中,定时任务可…

mac远程连接windows10-Microsoft Remote Desktop

主要碰到的坑: windows上没有开启远程桌面连接,导致Microsoft Remote Desktop连接的时候老报错。 开始菜单-》设置-〉远程桌面 如果还不行就看一下服务: 右键我的电脑-》管理 -〉服务 打开远程桌面服务(最好设置成自动启动&…

CygWin:windows上运行类linux命令

CygWin是一个在Windows平台上运行的类UNIX模拟环境,是Cygnus Solutions公司开发的自由软件。它提供了类似于Linux系统的终端环境和工具,使用户可以在Windows平台上运行Unix-like的程序,如Bash、awk、sed和grep等 。 下载setup.exe 安装Cygwin…

初阶C语言———操作符详解(2)

hello,我们又见面了,今天我们把操作符这一章节完结,那让我们一起来学习吧 逻辑操作符 &&逻辑与 ||逻辑或 这里我们要区分按位与和按位或还有逻辑与和逻辑或的区分。 1&2----->0 1&&2---->1 1|2----->3 1||2---…

Day46|139.单词拆分 、多重背包理论基础、背包问题总结

139.单词拆分 1.题目: 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s …

TiDB 7.1 资源管控验证测试

作者: dba-kit 原文来源: https://tidb.net/blog/9cd7dcb3 〇、背景 我们线上使用环境和李文杰大佬比较类似,我这里就不赘述了,大家可以看 专栏 - TiDB v7.1.0 跨业务系统多租户解决方案 | TiDB 社区 ,这里比较清…

PyQt---------PyQt组件的学习

1.QLabel组件 QLabel用于显示文本或图像,不提供用户交互功能,标签的视觉外观可以以各种方式配置。 举个例子吧 import sys from PyQt6.QtCore import Qt from PyQt6.QtWidgets import QApplication, QLabel, QMainWindowclass MainWindow(QMainWindow…

大厂C++题第1辑——虚函数七题精讲之2:虚函数的作用机制

一、虚函数的常见应用场景; 二、发挥虚函数作用的语法; 三、虚函数的实现机制; 四、虚函数的性能影响。 题2-虚函数的常见应用场景 上一节我们讲了虚函数的作用,同时也演示了虚函数发挥作用的路径之一: 一个派生类对…

Docker 私有仓库 harbor 搭建

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…